Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Tabellenblatt samt Makro kopieren

Tabellenblatt samt Makro kopieren
18.12.2017 12:06:34
Leo
Hallo ihr Guten,
es gibt bereits zu diesem Thema einige Beiträge, aber mein Anliegen ist in einer kleinen Feinheit anders.
Ich habe ein Makro für ein Tabellenblatt geschrieben, der sich auf eine Tabelle mit dem Namen "Tabelle3" bezieht: Hier soll die erste Zeile der Tabelle3 mit einem Makro hinzugefügt und mit einem anderen Makro gelöscht werden (per Klick auf ein Button).
Nun ist das Problem folgendes: Wenn ich dieses Tabellenblatt kopieren möchte (mit einem Makro) stimmen im neuen Tabellenblatt die "Bezüge" nicht mehr, da sich die Makros auf Tabelle3 beziehen.
Folgender Code ist in der Ursprungstabelle geschrieben:

Sub Makro15()
Range("Tabelle3[Fertigungsstoffe 2]").Select
Selection.ListObject.ListRows.Add (1)
End Sub

Sub Makro16()
Range("Tabelle3[Fertigungsstoffe 2]").Select
Selection.ListObject.ListRows(1).Delete
End Sub

Code für das Kopieren des Tabellenblattes:

Sub Makro24()
Sheets("Art. 3").Select
ActiveSheet.Buttons.Add(15, 89.25, 15.75, 14.25).Select
ActiveSheet.Buttons.Add(33, 88.5, 17.25, 13.5).Select
ActiveSheet.Buttons.Add(10.5, 258.75, 13.5, 10.5).Select
ActiveSheet.Buttons.Add(26.25, 257.25, 18, 12.75).Select
ActiveSheet.Buttons.Add(257.25, 522.75, 40.5, 26.25).Select
Sheets("Art. 3").Copy Before:=Sheets(4)
End Sub

Sofort kommt der folgende Fehler:
Laufzeitfehler '1004':
Anwendungs- oder objektdefinierter Fehler
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblatt samt Makro kopieren
18.12.2017 13:25:30
Piet
Hallo Leo
Der Makro Recorder schreibt zwar immer Select auf, in der Praxis kann man darauf verzichten!
Siehe untere Beispiele, ohne Select! - Ganz unten ein Makro das zugewisene Makros umschriebt!
Die Makros müssen natürlich in der neuen Arbeitsmappe vor dem Button aktivieren existieren.
Probier das Makro mal aus, Rückmeldung waere nett.
Range("Tabelle3[Fertigungsstoffe 2]").Selection.ListObject.ListRows.Add (1)
ActiveSheet.Buttons.Add(15, 89.25, 15.75, 14.25)
mfg Piet
'alle Externen Makros auf diese Arbeitsmappe umschreiben
'**  ich prüfe nicht ob die Makros in dieser Mappe existieren !!
Sub Externe_Makros_umschreiben()
Dim BMakro As String, j As Integer
'schreibe alle Makros im aktiven Blatt um
For j = 1 To ActiveSheet.Shapes.Count
'momentan aktives Makro im Button
BMakro = ActiveSheet.Shapes(j).OnAction
'Bei externen Makro den Mappen Namen abschneiden
If InStr(BMakro, ThisWorkbook.Name) = 0 Then
BMakro = Right(BMakro, Len(BMakro) - InStr(BMakro, "!"))
ActiveSheet.Shapes(j).OnAction = BMakro
End If
Next j
End Sub

Anzeige
AW: Tabellenblatt samt Makro kopieren
18.12.2017 13:28:46
Piet
Hallo Leo
habe vergessen zu fragen:
wo genau kommt der Laufzeitfehler? Wenn man Debuggen anklickt, welche Zeile wird - gelb markiert?
mfg Piet
AW: Tabellenblatt samt Makro kopieren
18.12.2017 13:50:22
Leo
Hallo Piet,
danke für die schnelle Antwort.
Ja ich habe mich falsch ausgedrückt: Der Fehler tritt auf, wenn ich im kopierten Tabellenblatt den Button "Zeile" hinzufügen anklicken möchte.
Der Fehler bezieht sich dann auf dieses Makro (erste Zeile):
Sub Makro18()
ActiveSheet.Range("Tabelle3").Select
Selection.ListObject.ListRows(1).Delete
ActiveSheet.Range("Tabelle3").Select
End Sub

Anzeige
AW: Tabellenblatt samt Makro kopieren
19.12.2017 10:30:01
Piet
Hallo Leo
ich denke mit etwas Hilfe wirst du das Problem selbst lösen, nur Mut zum experimentieren. So lernt man VBA!
zunechst ist dieser Ausdruck rein logisch falsch, normaler Anfaengerfehler:
ActiveSheet.Range("Tabelle3").Select
Selection.ListObject.ListRows(1).Delete
Active Shteet ist immer das Aktive Blatt, und Select dahinter aktiviert genau dieses Blatt! - (Was Unsinnig ist, es ist ja bereits aktıv!)
Range("Tabelle3") ist völlig falsch, denn Range bezieht sich immer auf Spalten und Zeilen, nicht auf eine Tabelle!!!
ActiveSheet.Range("A1:B25") ist z.B. ein korrekt definierter Bereich. Ein Tabellen Name gehört da -NICHT- hin!!
Fasse obigen Code wie folgt zusammen:
Worksheets("Tabelle3").ListObject.ListRows(1).Delete
Dieser Code funktionier auch dann, wenn dein Aktives Blatt Tabelle1 ist. VBA haelt sich exakt an die obige Anweisung!
Und die besagt eindeutig was in Tabelle3 zu tun ist, -OHNE- diese vorher zu aktivieren!
Wir Programmierer verzichten auf Select, zeichnen uns auch Codes mit dem Makro Recorder auf, wei es so schön einfach ist. Doch dann "bereinigen" wir den Code indem wir Alle Select Anweisungen so weit wie möglich zusammenziehen. Select und Selection dahinter kann man direkt zusammenschreiben! Die Arbeit machen wirt uns auch. Der Code ist dann viel eleganter und weniger störanfaellig.
Alles nur eine Gewöhnungs- und Übungssache. Keine Sorge, diese Feinheiten kommen mit der -Praxis-
Ich habe mehrere Jahre dafür gebraucht. Dann wird es zur Routine.
Bereinige deine vorhanden Codes bitte mal auf die Art und Weise, und schau ob sie dann funktionieren.
Ich warte mal das Erbegnis ab ...
mfg Piet
Anzeige
AW: Tabellenblatt samt Makro kopieren
19.12.2017 10:35:34
Piet
Hallo Leo
wenn du mit der Sache nicht klarkommst kannst du mir dann bitte eine anonyme Beispieldatei erstellen.
Mir geht es nur darum die Makrofunktion in der Praxis nachvollziehen zu können.
mfg Piet
AW: Tabellenblatt samt Makro kopieren
18.12.2017 14:13:31
Leo
Hallo Piet,
also ich bin mir nicht sicher wo und wie ich deine Makros einfügen soll. Da bin ich etwas verwirrt gerade, aber vielleicht kann ich nochmal mein Problem anders schildern.
Ich habe ein Tabellenblatt mit der Bezeichnung "Art. 3" erstellt. Hier habe ich eine Tabelle mit dem Namen "Tabelle3" (diese Tabelle wurde erstellt mit "Als Tabelle formatieren" in der Registerkarte "Start").
Nun habe ich zwei Makros geschrieben, aber wir können uns erst einmal das erste Makro anschauen:

Sub Makro15()
Range("Tabelle3[Fertigungsstoffe 2]").Select
Selection.ListObject.ListRows.Add (1)
End Sub
Ich erstelle im Tabellenblatt "Art. 3" ein Button und weise diesem Button den oben genannten Code zu.
Nun kann ich per Klick Zeilen in "Tabelle3" hinzufügen.
Wenn ich das ganze Tabellenblatt "Art. 3" kopiere ändert sich die Bezeichnung der "Tabelle3" im kopierten Tabellenblatt "Art. 3(2)" zu "Tabelle38" (warum auch immer).
Nun ist der obige Code nicht mehr gebrauchbar und wenn man ihn anklickt, kommt eine Fehlermeldung.
Ich vermute der Bezug zu Tabelle3 muss im neuen Tabellenblatt auf Tabelle38 geändert werden, aber wie? Irgendwie muss ich dieses Problem umgehen, denn ich will mit einem einzigen Makro mehrmals das selbe Ursprungstabellenblatt kopieren.
Beste Grüße
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Tabellenblatt samt Makro kopieren in Excel


Schritt-für-Schritt-Anleitung

  1. Vorbereiten des Makros: Stelle sicher, dass du dein Original-Makro für das Hinzufügen und Löschen von Zeilen in der Tabelle „Tabelle3“ korrekt geschrieben hast. Hier ist ein Beispiel:

    Sub Makro15()
       Range("Tabelle3[Fertigungsstoffe 2]").Select
       Selection.ListObject.ListRows.Add (1)
    End Sub
    
    Sub Makro16()
       Range("Tabelle3[Fertigungsstoffe 2]").Select
       Selection.ListObject.ListRows(1).Delete
    End Sub
  2. Kopieren des Tabellenblatts: Verwende den folgenden Code, um das Tabellenblatt „Art. 3“ zu kopieren. Achte darauf, dass du den Code an die aktuelle Struktur deiner Arbeitsmappe anpasst.

    Sub Makro24()
       Sheets("Art. 3").Copy Before:=Sheets(4)
    End Sub
  3. Bearbeiten der Makros im neuen Blatt: Nach dem Kopieren wird die Tabelle in der neuen Kopie umbenannt (z.B. „Tabelle38“). Du musst die Makros so anpassen, dass sie auf die neue Tabelle verweisen.

  4. Makros umschreiben: Verwende das folgende Makro, um die Makros in der aktuellen Arbeitsmappe umzuschreiben, sodass sie auf die neue Tabelle verweisen:

    Sub Externe_Makros_umschreiben()
       Dim BMakro As String, j As Integer
       For j = 1 To ActiveSheet.Shapes.Count
           BMakro = ActiveSheet.Shapes(j).OnAction
           If InStr(BMakro, ThisWorkbook.Name) = 0 Then
               BMakro = Right(BMakro, Len(BMakro) - InStr(BMakro, "!"))
               ActiveSheet.Shapes(j).OnAction = BMakro
           End If
       Next j
    End Sub

Häufige Fehler und Lösungen

  • Laufzeitfehler '1004': Dieser Fehler tritt auf, wenn du versuchst, die Zeile in der kopierten Tabelle hinzuzufügen oder zu löschen. Um dies zu vermeiden, stelle sicher, dass die Makros auf die aktuellen Tabellennamen verweisen.

  • Falsche Referenzierung von Tabellen: Wenn du ActiveSheet.Range("Tabelle3") verwendest, kann das zu Fehlern führen. Verwende stattdessen:

    Worksheets("Tabelle3").ListObject.ListRows(1).Delete

Alternative Methoden

Eine andere Möglichkeit, um eine Excel-Tabelle mit Makros zu kopieren, besteht darin, die Tabelle als separate Datei zu speichern und dann wieder zu importieren. Dies kann nützlich sein, wenn du die Struktur der Tabelle beibehalten möchtest, ohne die Verweise manuell anpassen zu müssen.


Praktische Beispiele

Wenn du ein Tabellenblatt „Art. 3“ mit einer Tabelle „Tabelle3“ hast und das Makro „Makro15“ verwendet wird, um eine Zeile hinzuzufügen, könntest du den Code wie folgt anpassen:

Sub Makro18()
    Worksheets("Tabelle38").ListObject.ListRows(1).Delete
End Sub

Hier wird „Tabelle38“ direkt angesprochen, um sicherzustellen, dass die Zeile in der richtigen Tabelle gelöscht wird.


Tipps für Profis

  • Verzichte auf Select: Du kannst deinen Code optimieren, indem du Select und Selection vermeidest. Dies macht deinen Code schneller und weniger anfällig für Fehler.

  • Verwende strukturierte Referenzen: Nutze strukturierte Tabellenreferenzen, um deine Makros klarer und robuster zu gestalten.


FAQ: Häufige Fragen

1. Wie kann ich Makros in einer kopierten Tabelle anpassen?
Du kannst das Makro „Externe_Makros_umschreiben“ verwenden, um die Bezüge automatisch anzupassen.

2. Warum ändert sich der Name meiner Tabelle beim Kopieren?
Excel fügt automatisch eine Nummer hinzu, um sicherzustellen, dass jeder Tabellenname einzigartig ist. Du musst die neuen Namen in deinen Makros berücksichtigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige