Office: (Office 2010) Per Makro Tabelle und inhalt kopieren und in eine neue Seite kopieren

Helfe beim Thema Per Makro Tabelle und inhalt kopieren und in eine neue Seite kopieren in Microsoft Word Hilfe um das Problem gemeinsam zu lösen; Guten Tag Zusammen Ich hoffe Ihr könnt mir helfen. Ich versuche 2 Makros via Button zu aktivieren. Das erste Soll eine weitere Seite hinzufügen, das... Dieses Thema im Forum "Microsoft Word Hilfe" wurde erstellt von Lenny2016, 25. November 2016.

  1. Per Makro Tabelle und inhalt kopieren und in eine neue Seite kopieren


    Guten Tag Zusammen

    Ich hoffe Ihr könnt mir helfen. Ich versuche 2 Makros via Button zu aktivieren. Das erste Soll eine weitere Seite hinzufügen, das zweite eine Seite Löschen. Das erste Makro, eine Seite hinzufügen habe ich mehr schlecht als recht hinbekommen. Es wird zwar die Tabelle kopiert und in eine zweite Seite gefügt, aber das klappt nur beim ersten Mal. Eine weitere Seite will der Button dann nicht hinzufügen. Ein weiteres Problem ist, dass ich nicht weiss, wie es sagen soll, dass er nur die 2,3 und 4 Spalte kopieren soll. Die erste ist ja der Titel.

    Das zweite Makro, eine Seite entfernen funktioniert gar nicht. :-(

    Hier meine Makros:

    Private Sub CommandButton1_Click()

    If MsgBox("1 Seite hinzufügen?", vbYesNo, "") = vbYes Then

    If ActiveDocument.ProtectionType <> wdNoProtection Then
    ActiveDocument.Unprotect

    ActiveDocument.Tables(1).Select
    Selection.Copy
    Selection.Paste

    ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True

    End If
    End If
    End Sub
    -----------------------------------------------------------------------------------------

    Private Sub CommandButton2_Click()

    If MsgBox("1 Seite entfernen?", vbYesNo, "") = vbYes Then

    If ActiveDocument.ProtectionType <> wdNoProtection Then
    ActiveDocument.Unprotect

    ActiveDocument.Tables(1).Select
    Selection.Delete

    ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True

    End If
    End If
    End Sub

    Bin für jeden Hinweis dankbar.

    Gruss Lenny
     
    Lenny2016, 25. November 2016
    #1
  2. Exl121150 Erfahrener User
    Hallo Lenny,

    im folgenden Code habe ich deine beiden Makros entsprechend deinen Wünschen modifiziert.

    1) Im 1.Makro für das Klick-Ereignis von "CommandButton1" wird stets die 1. Tabelle im Dokument genommen und alle Spalten (nicht Zeilen!!) dieser Tabelle außer der ersten werden als neue Tabelle am Ende des Dokumentes angefügt, wobei zuvor noch ein Seitenumbruch eingefügt wurde, um eine neue Seite zu erzeugen.

    2) Im 2.Makro für das Klick-Ereignis von "CommandButton2" wird stets der Bereich zwischen Ende der vorletzten Tabelle und dem Dokumentenende entfernt. Somit wird auch ein darin enthaltener Seitenumbruch entfernt. Damit wird nicht bloß die letzte Tabelle entfernt, sondern auch die letzte Seite.

    Code:
    Option Explicit
    
    Private Sub CommandButton1_Click()
      Dim rgTab As Range, tbTab As Table, clHead As Cell
      Dim Sp%, Zl%, rgDoc As Range
    
      If MsgBox("1 Seite hinzufügen?", vbYesNo, "") = vbYes Then
      
        If ActiveDocument.ProtectionType <> wdNoProtection Then
          
          ActiveDocument.Unprotect
          
          'Falls ein Fehler auftritt, springe zur Programmmarke "Err_Keine_Tabelle_vorhanden":
          On Error GoTo Err_Keine_Tabelle_vorhanden
          
          'Die nächste Zeile kann einen Fehler auslösen, falls noch keine "Table" existiert:
          'Merke dir den Bereich der ersten "Table" im "ActiveDocument":
          Set rgTab = ActiveDocument.Tables(1).Range
          
          'Gehe ans Ende des "ActiveDocument":
          Set rgDoc = ActiveDocument.Range
          rgDoc.Collapse Direction:=wdCollapseEnd
          
          'Füge hier einen "Seitenumbruch" ein:
          rgDoc.InsertBreak Type:=wdPageBreak
          
          'Es soll die erste "Table" ohne ihrer ersten Spalte kopiert werden:
          Sp% = rgTab.Columns.Count 'Ermittle Spaltenanzahl der Tabelle (=Sp%)
          rgTab.Columns(2).Select   'Markiere die 2.Spalte der Tabelle
          'Erweitere die Marierung um die restlichen Spalten (Sp%-2) der Tabelle
          Selection.MoveRight Unit:=wdCharacter, Count:=Sp% - 2, Extend:=wdExtend
          Selection.Copy  'Kopiere Markierung in die Zwischenablage
          rgDoc.Paste     'Füge Zwischenablage am Ende des "ActiveDocument" ein.
          
          'Schütze das "ActiveDocument" wie gehabt:
          ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True
        
        End If
      End If
      Exit Sub
      
    Err_Keine_Tabelle_vorhanden:
      'Es gibt im "ActiveDocument" noch keine "Table": Erzeuge daher eine "Table":
      'Gehe dazu ans Ende des "ActiveDocument"
      Set rgDoc = ActiveDocument.Range
      rgDoc.Collapse Direction:=wdCollapseEnd
      
      'Füge hier eine (die erste) "Table" hinzu mit 10 Zeilen und 4 Spalten:
      Set tbTab = ActiveDocument.Tables.Add(Range:=rgDoc, NumRows:=10, NumColumns:=4)
      tbTab.AutoFormat Format:=wdTableFormatClassic2
      
      'Füge in die 1.Zeile dieser "Table" eine behelfsweise Kopfzeilenbeschriftung ein:
      Sp% = 1
      For Each clHead In tbTab.Rows(1).Cells
        clHead.Range.Text = "Spalte" & Sp%
        Sp% = Sp% + 1
      Next clHead
      
      'Springe zurück in die Programmzeile, die den Fehler ausgelöst hat, und
      'führe sie nochmals (und diesmal fehlerfrei) aus:
      Resume
      
    End Sub
    
    Private Sub CommandButton2_Click()
      Dim tbCt%, rgDoc As Range
    
      If MsgBox("1 Seite entfernen?", vbYesNo, "") = vbYes Then
      
        If ActiveDocument.ProtectionType <> wdNoProtection Then
          ActiveDocument.Unprotect
          
          'Gehe ans Ende der vorletzten "Table"
          tbCt% = ActiveDocument.Tables.Count
          Set rgDoc = ActiveDocument.Tables(tbCt% - 1).Range
          rgDoc.Collapse Direction:=wdCollapseEnd
          
          'Behalte diese Stelle als Anfangsmarkierung,
          'erweitere die Markierung bis ans Ende des "ActiveDocument"
          rgDoc.MoveEnd Unit:=wdStory
          'Lösche diesen so ermittelten Bereich
          rgDoc.Delete
          
          ActiveDocument.Protect wdAllowOnlyFormFields, NoReset:=True
          
        End If
      End If
    End Sub
    
    
    Einfach obigen Code kopieren und bei dir (anstelle deiner Makros) einfügen.
    Ich habe dir genügend Kommentar beigefügt, um die Abläufe in den Makros zu verdeutlichen.
    Die beiden Buttons im Dokument kannst du dafür belassen, wie sie sind.
     
    Zuletzt bearbeitet: 27. November 2016
    Exl121150, 27. November 2016
    #2
  3. Guten Tag

    Vielen Dank Anton Exl für deine ausführliche Antwort. Im speziellen die Kommentare sind extrem hilfreich das Makro zu verstehen.
    Die einzelnen Schritte habe ich verstanden und zusätzlichen Funktionen sind super.
    Ich habe den ganzen Code kopiert und in mein Dokument eingefügt. Leider stützt mir das Word ab beim ausführen des Makros (Keine Rückmeldung). Wenn ich dann die Sicherheitskopie öffne, sehe ich, dass Spalten eingefügt wurden aber x-fach. Denn Fehler dahinter kann ich jedoch nicht erkennen.
    Ich würde mich freuen, wenn Du/Ihr mich hierbei nochmals unterstützen könntest.

    Hier Mal ein Printscreen meines Dokuments, damit man sieht sich vorstellen kann wie das Dokument aussieht.
    Per Makro Tabelle und inhalt kopieren und in eine neue Seite kopieren Eine Seite hinzufügen.JPG

    Gruss
    Lenny
     
    Lenny2016, 28. November 2016
    #3
  4. Exl121150 Erfahrener User

    Per Makro Tabelle und inhalt kopieren und in eine neue Seite kopieren

    Hallo Lenny,

    ich habe mir den Code nochmals angesehen und bemerkt, dass du "Office 2010" als deinen Besitz angegeben hast.
    Ich war etwas unachtsam und habe eine Methode eingebaut, die erst ab "Office 2013" verfügbar ist.

    Wenn du im 1.Makro eine Zeile statt als Programmzeile in eine Kommentarzeile umwandeln würdest:
    also statt
    Code:
      tbTab.AutoFormat Format:=wdTableFormatClassic2
    
    folgende kleine Änderung (ein Kommentar-Hochkomma am Anfang der Zeile)
    Code:
      'tbTab.AutoFormat Format:=wdTableFormatClassic2
    
    vornehmen würdest.
     
    Exl121150, 28. November 2016
    #4
  5. Hallo Anton Exl

    Nochmals Danke für deine Hilfe. Leider zeigt sich immer noch das gleiche Phänomen, auch wenn die entsprechende Programmzeile mit dem Hochkomma in eine Kommentarzeile umgewandelt wird. Das Word hängt sich auf...
    Habe abermals versucht selbst den Fehler zu entdecken, aber ich sehe einfach nicht was es sein könnte...

    Gruss
    Björn
     
    Lenny2016, 28. November 2016
    #5
  6. Nochmals Hallo Zusammen

    Vielleicht kann mir doch noch jemand weiterhelfen. Habe jetzt alle mögliche ausprobiert, aber irgendwie kriege ich es einfach nicht hin.
    Ich habe mal alles was nicht zwingen nötig ist aus dem Code entfernen. Übrig bleibt folgendes:

    'Es soll die erste "Table" ohne ihrer ersten Spalte kopiert werden:
    Sp% = rgTab.Columns.Count 'Ermittle Spaltenanzahl der Tabelle (=Sp%)
    rgTab.Columns(2).Select 'Markiere die 2.Spalte der Tabelle
    'Erweitere die Markierung um die restlichen Spalten (Sp%-2) der Tabelle
    Selection.MoveRight Unit:=wdCharacter, Count:=Sp% - 2, Extend:=wdExtend
    Selection.Copy 'Kopiere Markierung in die Zwischenablage
    rgDoc.Paste 'Füge Zwischenablage am Ende des "ActiveDocument" ein.

    bei Ausführen des Makros kommt jedoch die Fehlermeldung "Laufzeitfehler '91':
    Objektvaiable oder With-Blockvariable nicht festgelegt.

    Die Zeile, die ich hier rot markiert habe ist dann bei mir gelb hinterlegt.

    Weiss jemand Rat dazu???

    Gruss
    Lenny
     
    Lenny2016, 30. November 2016
    #6
  7. Exl121150 Erfahrener User
    Hallo,

    Falls du tatsächlich vor dieser Zeile keine weitere Programmzeile stehen hast, so ist natürlich klar, dass dieser Fehler kommen muss.

    1) Die Variable "rgTab" hatte ich in meinem Makro als "Range" deklariert im Dim-Statement.

    2) Weiters hatte ich dieser Variablen mittels " Set rgTab = ActiveDocument.Tables(1).Range" einen Zeigerwert zugewiesen und zwar wird hier aus dem aktiven Dokument (der aktuellen Word-Datei) die erste Tabelle gesucht und der dazu gehörige Bereich (Word-Range) ermittelt und ein Zeiger auf diesen Range in der Variablen "rgTab" gespeichert.

    3) Das ist natürlich Voraussetzung, dass dann die Wertzuweisung "Sp% = rgTab.Columns.Count" funktioniert. Hier wird mit der Zeigervariablen "rgTab" wieder auf den vorhin ermittelten Range zugegriffen, die darin enthaltene Spaltenauflistung "Columns" geholt und die Anzahl (Count) dieser Spalten ermittelt und der Integer-Variablen (16-bit) "Sp%" zugewiesen.

    Falls die Punkte 1) und 2) fehlen, hat die Variable "rgTab" keinen Wert bzw. als Typ vermutlich nur "Variant" und VBA bleibt nichts übrig, als das Programm mit einem Runtime-Fehler 91 abzubrechen.
     
    Exl121150, 30. November 2016
    #7
  8. Per Makro Tabelle und inhalt kopieren und in eine neue Seite kopieren

    Hallo Anton Exl

    Danke für deine Antwort. Deinen Ausführung kann ich folgen, aber sehe noch immer keinen Lösungsansatz für mich. Bin langsam echt am Verzweifeln. Wahrscheinlich habe ich mir einfach zu viel vorgenommen. Mit meinen magern VBA Kenntnissen ist mein Vorhaben vielleicht zu ambitioniert. Gebe jetzt natürlich nicht auf, aber weiss gerade auch nicht wie ich weiterkomme.

    Auf deinen neune Hinweis, habe ich zusätzlich die Kommandozeile:

    'Merke dir den Bereich der ersten "Table" im "ActiveDocument":
    Set rgTab = ActiveDocument.Tables(1).Range

    hinzugefügt.

    Damit funktioniert das Makro jetzt grundsätzlich, aber Problem Nr. 1, der Umbruch folgt auf der nächsten Seite und die Tabelle wird in die übernächste Seite kopiert.
    Problem Nr. 2, der Button in der kopierten Tabelle funktioniert nicht um eine weitere Seite hinzuzufügen.
     
    Lenny2016, 1. Dezember 2016
    #8
  9. Ich nochmals...

    Das ganze lässt mir keine Ruhe. Habe noch ein wenig gebastelt und bin jetzt soweit, dass durch den Button "1 Seite hinzufügen" die Tabelle kopiert wird, einen Seitenumbruch erfolgt und die Tabelle auf einer neuen Seite eingefügt wird.

    Das Problem Nr. 2, dass der Button nur auf der 1 Seite funktioniert besteht leider noch immer. Wie kann ich das lösen?
    Mir sind jetzt aber noch zwei Sachen aufgefallen. In der Tabelle befinden sich ja Bildinhaltssteuerelemente. Super wäre, wenn die Grösse der Tabelle nicht verändert wird, egal wie die Grösse des Bildes ist und zweitens sollte ein bereits eingefügtes Bild ersetzt werden kann.

    Ich komme der Lösung immer näher, aber ich brauche doch noch Unterstützung.


    Gruss
    Lenny
     
    Lenny2016, 1. Dezember 2016
    #9
Thema:

Per Makro Tabelle und inhalt kopieren und in eine neue Seite kopieren

Die Seite wird geladen...
  1. Per Makro Tabelle und inhalt kopieren und in eine neue Seite kopieren - Similar Threads - Makro Tabelle inhalt

  2. Datentabelle per VBA Makro durch Kopieren und Einfügen einer Kopfzeile aufteilen

    in Microsoft Excel Hilfe
    Datentabelle per VBA Makro durch Kopieren und Einfügen einer Kopfzeile aufteilen: Hallo Zusammen, mein erster Beitrag hier, also schon mal Sorry im Voraus, wenn unvollständig beschrieben *:)* Ich habe das Forum schon nach einem brauchbaren Lösungsansatz durchsucht, bin aber...
  3. Makro - zurück zur zuletzt geöffneten Tabelle !

    in Microsoft Excel Hilfe
    Makro - zurück zur zuletzt geöffneten Tabelle !: Hallo zusammen, ich habe folgendes Problem. ich habe mehrere Tabellen und wechsle mit Makros von Tabelle zu Tabelle. Jetzt hätte ich gerne ein Makro das mich zurück zur letzten Tabelle bringt....
  4. Zeilen mit bestimmten Wert in andere Tabelle (VBA Makro)

    in Microsoft Excel Hilfe
    Zeilen mit bestimmten Wert in andere Tabelle (VBA Makro): Hallöchen, ich stehe aktuell vor folgendem Problem: Wir haben ein Excel Makro, das über die Zeiterfassung alle Mitarbeiter und ihre Stunden in verschiedenen Positionen auflistet. Eine abgespeckte...
  5. VBA Excel in mehrere teilen nach Kostenstelle

    in Microsoft Excel Hilfe
    VBA Excel in mehrere teilen nach Kostenstelle: Hallo liebe Office Community, ich bin mit VBA nicht so bewandert und habe folgenden "Auftrag"... Eine Excel Datei aus SAP soll aufgeteilt werden nach Kostenstelle. Sprich für jede Kostenstelle...
  6. Audiodateien anhand einer Excel sortieren

    in Microsoft Excel Hilfe
    Audiodateien anhand einer Excel sortieren: Hallo zusammen, Ich stehe momentan vor folgendem Problem. Ich muss aus einer Audiobibliothek mit über 5000 Titeln jeweils 200 und 500 heraussuchen und am besten in einen separaten Ordner packen....
  7. Formel oder Makro für Datenabgleich?

    in Microsoft Excel Hilfe
    Formel oder Makro für Datenabgleich?: Hallo zusammen, bitte um Eure Hilfe bezüglich eines Datenabgleichs zwischen zwei Tabellenblättern innerhalb einer Arbeitsmappe. Beide Tabellenblätter haben die gleichen Spaltenüberschriften:...
  8. Zellen per Makro in Tabelle zum jeweiligen Datum kopieren

    in Microsoft Excel Hilfe
    Zellen per Makro in Tabelle zum jeweiligen Datum kopieren: Hallo ihr Excel-Profis, ich könnte eure Hilfe gebrauchen. Ich habe eine Berechnungstabelle, die verschiedene Zellen mit Ergebnissen ausgibt. Des Weiteren habe ich 12 Blätter für die jeweiligen...
  1. Nixxnuzz
Schlagworte:
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden