Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1596to1600
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige