Wer will schon den aalglatten Prinzen, wenn man schon den Hofnarren mit Dreitagebart haben kann?

Ist Ihnen das schon aufgefallen:
In einer Excelmappe gibt es zwei Tabellenblätter: Tabelle1 und Tabelle2. Tabelle1 liegt links; Tabelle2 rechts. Tabelle2 wird ausgeblendet.


Wenn man nun Tabelle1 kopiert: Kopie erstellen (ans Ende stellen) und anschließend Tabelle2 wieder einblendet: Liegt die Kopie nun links oder rechts von Tabelle2?


Die Lösung: sie liegt links von der ehemals ausgeblendeten Tabelle. „Ans Ende stellen“ heißt also: „Ans Ende der sichtbaren Tabellen stellen“. Ist das schlimm? Man sieht doch, wo die Tabellen liegen?
Die Antwort:
Wenn Sie per Programmierung ein Blatt in eine andere Datei kopieren, beispielsweise so:
Dim xlBlatt As Worksheet
Dim xlDatei As Workbook

Set xlDatei = Application.Workbooks.Open(„D:\Excel\Testdatei.xlsx“)
Set xlBlatt = ThisWorkbook.Worksheets(„Tabelle1“)
xlBlatt.Copy After:=xlDatei.Worksheets(xlDatei.Worksheets.Count)

MsgBox xlDatei.Worksheets(xlDatei.Worksheets.Count).Name
Nun liefert das Meldungsfenster nicht den Namen des kopierten Blattes, sondern den Namen des letzten Blattes (wenn es ausgeblendet war). Und: leider liefert die Methode Copy kein Objekt, also kein Verweis auf ein Tabellenblatt zurück.
Heißt: gut aufpassen! Sonst nervt das Ergebnis!

2 Kommentare

  • Andreas Waechtler

    Danke für das Beispiel und die gute Erklärung, hat mich auch schon verzweifeln lassen!

    So wie ich Excel kenne, hängt es an das kopierte Blatt ein “ (2)“ an, bzw. zählt entspr. weiter wenn so ein Blatt schon existiert.
    Vielleicht wäre dies eine kleine Hilfe / workaround, um die „Kontrolle“ über den Namen (Variable im u.a. Beispiel) des kopierten bzw. eines neu angelegten Blattes zu behalten?
    Der Witz dabei ist, dass nach dem Kopieren / Hinzufügen das neue / kopierte Blatt das aktive ist!:

    ’neues Blatt (für Ausgabe), um bestehende Daten nicht zu überschreiben:
    On Error Resume Next ‚falls Blatt gcstrListShtName noch nicht existiert
    Sheets(gcstrListShtName).Activate
    If Err.Number = 0 Then
    Else
    ActiveWorkbook.Sheets.Add After:=ActiveSheet
    ’new sheet is now active!:
    ActiveSheet.Name = gcstrListShtName
    End If
    On Error GoTo 0

    Die ‚On Error‘ Geschichte nur, um einen Fehler zu unterdrücken wenn der Blattname schon existiert. Dann wird nämlich kein neues Blatt erzeugt.
    LG, andreas

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.