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 zu Andreas Waechtler Antworten abbrechen

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