Ich habe mich gefragt, ob es eine klügere/genauere Methode zum Debuggen von Benutzerform-Initialisierungen in VBA gibt, die von einem bestimmten Modul aufgerufen werden.Genaues Debuggen eines aufgerufenen Benutzerformulars in VBA Excel 2016
Da, wenn ich ein fehlerhaftes Stück Code in der Userform_initialisize, schreibe ich den Fehler, den ich einen Fehler angibt, aber nicht wo es auftritt, das markierte Stück Code ist einfach call Userform_intitialize
und ich bin raten, welches Stück Code in Sub Userform_intitialize
enthält den Fehler.
Inkrementelles Erstellen eines Benutzerformulars mit Testläufen nach jeder kleinen Codeerweiterung funktioniert effektiv, um einen stabilen Initialisierungscode für die Benutzerform zu erstellen. Weil ich weiß, was ich seit dem letzten erfolgreichen Lauf geändert habe, aber es würde eine Menge Zeit sparen, wenn ich sofort weiß, wo der Fehler auftritt, besonders in Fällen, in denen Probedurchläufe viel Zeit verbrauchen.
So gibt es Möglichkeiten zu extrahieren, in welcher Zeile der genaue Fehler innerhalb einer aufgerufenen Sub Userform_intitialize
in VBA Excel 2016 auftritt?
Sie können einen Haltepunkt am Anfang von 'Userform_initialize' platzieren und Schritt für Schritt mit' F8' ausführen. Allerdings bin ich ein wenig verwirrt, warum nennst du explizit 'Userform_intialisieren'; Dieser Code wird automatisch aufgerufen (wie ein Konstruktor oder Initialisierer des Formulars), wenn das Benutzerformular geladen wird. Sie sollten es nicht explizit (nach Regeln guter Praxis) nennen. –
Wow, danke! Ich fühle mich wie ein Radfahrer, der endlich ziehen kann; anstatt den versteckten Code intuitiv zu verbessern, kann ich einfach sehen, was passiert! So ein Augenöffner :) Ich muss zuerst Berechnungen basierend auf Sheet-Eingabe, die Form (die Anzahl der Textfelder z. B. in) das Benutzerformular, so dass es eine dynamische Benutzerform ist. Ich hatte Schwierigkeiten mit der gesamten dynamischen Ladung und Initialisierung, also endete ich mit dieser Konstruktion. Aber ich verstehe den Punkt, ich muss mit der exakten Hierarchie/Reihenfolge der (Erstellung der) Benutzerform mehr üben. Danke für das Teilen @ A.S.H! –
Ich verstehe deinen Standpunkt. In diesem Fall würde ich eine separate Routine machen, die das Formular dynamisch "neu initialisiert/neu berechnet", und diese Routine kann von jedem Ort sowie von "Userform_initialize" aufgerufen werden. Letzterer sollte zuerst eine anfängliche Konstruktion durchführen und dann die separate Routine aufrufen. Diese Art der Trennung von Verantwortlichkeiten ist sehr vorteilhaft. –