Seite 1 von 1

VBA Makro nur für eine bestimmte Tabelle

BeitragVerfasst: 30. Jun 2021, 09:52
von JodaRulz
Hallo zusammen,

ich habe eine Word-Vorlage mit mehreren Tabellen. Hierbei sollen in einer bestimmten Tabelle (aktuell Tables(12)) Zeilen hinzugefügt, beziehungsweise gelöscht werden können. Die anderen Tabellen sollen unveränderbar sein.
Das Einfügen/Löschen von Zeilen ist in dem Sinne ja kein Problem, allerdings funktioniert dieser Code in jeder Tabelle, in welcher sich der Cursor aktuell befindet.

Bsp. für Zeile löschen:
Code: Alles auswählen
Sub loeschen()

ActiveDocument.Unprotect
tbreihe = Selection.Information(wdEndOfRangeRowNumber)

If Selection.Information(wdWithInTable) = True Then
Selection.Rows.Delete
End If
ActiveDocument.Tables(12).Cell(tbreihe + 1, 1).Select

ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=""

End Sub


Daher nun die Frage: Ist es möglich, die Bedingung über eine Schleife ala "if in Tables(12) then Löschen/Hinzufügen else exit" zu formulieren?

Vielen Dank schon einmal im Voraus

Re: VBA Makro nur für eine bestimmte Tabelle

BeitragVerfasst: 30. Jun 2021, 10:08
von DerHoepp
Moin,

du kannst die .Start-Position der Tabelle mit der .Start-Position der Selection vergleichen:
Code: Alles auswählen
Sub testen()
    If Selection.Information(wdWithInTable) Then
        If Selection.Start >= Me.Tables(2).Range.Start And Selection.Start <= Me.Tables(2).Range.End Then
            Debug.Print "Drin"
        End If
    End If
End Sub


Viele Grüße
derHöpp

[Nachtrag:] Allgemein vielleicht besser so:
Code: Alles auswählen
Option Explicit

Sub testen()
    Debug.Print IsRangeInSpecificTable(Selection.Range, Tables(2))
End Sub

Private Function IsRangeInSpecificTable(rng As Range, tbl As Table)
    IsRangeInSpecificTable = rng.Start >= tbl.Range.Start And rng.End <= tbl.Range.End
End Function


Nachtrag 2:
Noch einfacher wohl mit eingebauten Funktionen:
Code: Alles auswählen
Debug.Print Selection.Range.InRange(Tables(2).Range)

Re: VBA Makro nur für eine bestimmte Tabelle

BeitragVerfasst: 30. Jun 2021, 10:30
von JodaRulz
Funktioniert einwandfrei!! :D

vielen Dank für die schnelle Hilfe! :idea:

Re: VBA Makro nur für eine bestimmte Tabelle

BeitragVerfasst: 30. Jun 2021, 20:46
von theoS
Interessante Aufgabe.
Wenn ich es richtig verstanden habe, dann willst du den Code immer in der 12. Tabelle verwenden. Was natürlich doof ist, wenn mal eine dazu kommt oder wegfällt.
Jetzt bin ich ja ein großer Freund von Namen und tatsächlich kann man auch in Word Tabellen benamsen.
Die Eigenschaft lässt sich unter "Eigenschaften" eintragen und nennt sich da »Titel«.
Damit ist es dann - so nicht jemand auf die Idee kommt, eine zweite so zu nennen, oder die zu kopieren, die so heißt, auch zur Auswahl verwenden.
Höpps Code mal so abgewandelt, dass die Tabelle den Titel »Dings« trägt.
Code: Alles auswählen
Sub tr()

    If Selection.Information(wdWithInTable) Then
        If Selection.Tables(1).Title = "Dings" Then
            Debug.Print "Drin"
        End If
    End If
End Sub