Hallo Zusammen
Ich versuche 2 Makros für mein Word Dokument zu schreiben aber irgendwie kriege ich das nicht hin.
Die Funktion ist eigentlich ganz simpel. In einem geschützten Word Dokument habe ich eine Tabelle (2 Spalten und 4 Zeilen). In der 1. Zeile, links steht der Titel. In den Zeilen 2 und 3, kommt links ein Foto rein und rechts einen Text dazu. In die 4. Zeile kommt links der Button für “Eine Seite hinzufügen“ und recht für “Eine Seite entfernen“.
Mit dem Button “Eine Seite hinzufügen“ soll das Makro die bestehende Tabelle, inkl. Inhalt kopieren, ohne die Erste Zeile. Am Ende des Dokuments einen Seitumbruch einfügen und dann die kopierte Tabelle inkl. Buttons einfügen und auf der ersten Seite die Buttons wieder entfernen.
Der Button “Eine Seite hinzufügen“ soll einfach die letzte Seite entfernen. Und die Buttons auf die neue, letzte Seite setzten.
Zu den nötigen Makros habe ich bereits einige Tipps und Hilfe bekommen, aber ich bekomme es einfach nicht hin, dass die Makros sauber und ohne Fehler laufen.
Weiss einer von euch Rat?
Vielen Dank in Voraus für eure Hilfe
Hier Mal der Code den ich zusammen habe, aber nicht läuft:
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
|