VBA Codename des Blattes ändern Laufzeitfehler 9: Index außerhalb des Bereichs

8

Ich habe ein bisschen Code, wo ich, wenn ich einen Knopf drücke, ein Sub aufruft, das ein neues Blatt zu einer Arbeitsmappe hinzufügt und dann den Codenamen des Blattes ändert, um später in meinem Code leichter darauf zu verweisen . Das ist wie folgt:

%Vor%

Das scheint zu funktionieren - JEDOCH - nur wenn ich das "Developer" -Fenster geöffnet habe oder vorher geöffnet hatte.

Wenn ich beim ersten Öffnen des Excel-Dokuments (nachdem ich das Fenster "Entwickler" nicht geöffnet habe) auf die Schaltfläche klicke, wird das Blatt hinzugefügt, es tritt jedoch der folgende Fehler auf und ändert nicht den Codenamen des Blattes:

  

Laufzeitfehler '9': Index außerhalb des Bereichs

Nur wenn ich auf Debug drücke und den Code nach dem Öffnen des "Developer" -Fensters erneut öffne, fügt er den Codenamen hinzu.

Gibt es einen Weg dazu, damit der Benutzer das Entwicklerfenster nicht öffnen muss, damit es richtig läuft?

Danke

    
Fu113R 07.12.2016, 16:17
quelle

3 Antworten

5

@Comintern hat bereits eine funktionierende Lösung erhalten, aber dieser Code verschmutzt nicht Ihr Direktfenster und verwendet die versteckte _CodeName -Eigenschaft, um den Blattnamen zu ändern, anstatt auf die vbComponents -Auflistung zuzugreifen.

Es verwendet auch eine früh gebundene Worksheet Zuweisung zu wks und dann einen With Block, da auf mehr als 1 Mitglied von wks zugegriffen wird.

Interessanterweise ist die Platzierung der Verwendung des VBProject-Mitglieds wichtig.

%Vor%     
ThunderFrame 07.12.2016, 19:46
quelle
4

Wenn Sie möchten, dass der VBE geöffnet wurde, können Sie den Debugkontext dazu "tricksen", dies für Sie zu tun. Dies scheint alles zu tun, was das Projekt benötigt, um seine Indizierung zu aktualisieren, indem es das VBE.MainWindow ins Leben ruft:

%Vor%

Bearbeiten:

Es scheint, dass es genügt, den Verweis auf VBE.MainWindow zu erhalten (siehe Kommentare). Das funktioniert auch:

%Vor%     
Comintern 07.12.2016 17:03
quelle
0

Eine weitere einfache Methode zum Erzwingen der Aktualisierung der VBComponents-Sammlung:

%Vor%

%Vor%

Die Prozedur PropertyGetDiscard wird verwendet, um das Direktfenster nicht zu verschmutzen oder eine überflüssige Variable zu verwenden

    
hymced 04.09.2017 21:56
quelle