it-swarm.com.de

Arbeitsblatt in Excel VBA erstellen und benennen

Ich habe einen sehr einfachen Code, der einem Excel-Dokument ein neues Arbeitsblatt nach den aktuellen Arbeitsblättern hinzufügt und dann seinen Namen in ein Textfeld eines Benutzerformulars ändert. Funktioniert gut mit einer neuen Arbeitsmappe. In einer Arbeitsmappe mit einer Reihe vorhandener Arbeitsblätter wird zwar das neue Arbeitsblatt erstellt, aber nicht umbenannt.

Dies geschieht nur, wenn Sie diesen Code zum ersten Mal ausführen. Das nächste Mal wird es einwandfrei laufen. Was es noch merkwürdiger macht, ist, dass wenn Sie den VBA-Editor öffnen, um ihn zu debuggen, er auch gut läuft. Dies macht es offensichtlich schwierig, den Fehler zu finden.

Der Code, den ich verwende, ist hier:

     Dim WS As Worksheet

     Set WS = Sheets.Add(After:=Sheets(Worksheets.count))
     WS.name = txtSheetName.value

Ziemlich einfach. Ich frage mich, ob dieses Problem darin besteht, dass versucht wird, das Blatt umzubenennen, bevor es ordnungsgemäß erstellt wurde. Gibt es eine bessere Möglichkeit, diesen Code zu schreiben?

Update: Ich habe mit dem Debuggen mit msgboxes begonnen, da beim Öffnen des Debuggers das Problem aufhört, und es scheint, als ob die Verarbeitung des Codes zur Hälfte beendet wird:

  Dim WS As Worksheet
  MsgBox (WS Is Nothing)

    Set WS = Sheets.Add(After:=Sheets(Worksheets.count))
    '***** Nothing after this point gets processed *******
    MsgBox (WS Is Nothing)
    MsgBox WS.name

    WS.name = txtSheetName.value
    MsgBox WS.name
28
Sam Cogan

http://www.mrexcel.com/td0097.html

Dim WS as Worksheet
Set WS = Sheets.Add

Sie müssen nicht wissen, wo sich der Standort befindet oder wie er heißt, Sie bezeichnen ihn einfach als WS.
Wenn Sie dies immer noch auf "altmodische" Weise tun möchten, versuchen Sie Folgendes:

Sheets.Add.Name = "Test"
35
Sage

Verwenden Sie einen Fehlerhandler? Wenn Sie Fehler ignorieren und versuchen, einem Arbeitsblatt den Namen eines vorhandenen Arbeitsblatts oder eines Namens mit ungültigen Zeichen zu geben, kann es passieren, dass die Zeile übersprungen wird. Siehe die CleanSheetName-Funktion hier

http://www.dailydoseofexcel.com/archives/2005/01/04/naming-a-sheet-based-on-a-cell/

für eine Liste ungültiger Zeichen, nach denen Sie suchen möchten.

Update

Andere Dinge, die Sie ausprobieren sollten: Vollqualifizierte Referenzen, Doevents-Einwurf, Code-Reinigung. Dieser Code qualifiziert Ihren Sheets-Verweis auf ThisWorkbook (Sie können ihn in ActiveWorkbook ändern, wenn dies zutrifft). Es fügt auch tausend DoEvents hinzu (dummer Overkill, aber wenn etwas Zeit braucht, um etwas zu erledigen, wird es dies erlauben - Sie benötigen möglicherweise nur ein DoEvents, wenn dies tatsächlich etwas behebt).

Dim WS As Worksheet
Dim i As Long

With ThisWorkbook
    Set WS = .Worksheets.Add(After:=.Sheets(.Sheets.Count))
End With

For i = 1 To 1000
    DoEvents
Next i

WS.Name = txtSheetName.Value

Wenn ich ein doofes VBA-Problem habe, das einfach keinen Sinn macht, verwende ich Rob Boveys CodeCleaner. Es ist ein Add-In, das alle Ihre Module in Textdateien exportiert und sie dann erneut importiert. Sie können es auch manuell tun. Dieser Prozess bereinigt beschädigten p-Code, der herumhängt.

3
Dick Kusleika

Bestätigen Sie die Zelle vor dem Drücken der Taste (Drücken der Eingabetaste)? Der Inhalt der Zelle muss gespeichert werden, bevor ein Blatt benannt werden kann.

Ein besserer Weg, dies zu tun, ist, ein Dialogfeld aufzurufen und den gewünschten Namen zu erhalten.

0
Sprague