VBA Makro nur für eine bestimmte Tabelle

Moderator: ModerationP

VBA Makro nur für eine bestimmte Tabelle

Beitragvon JodaRulz » 30. Jun 2021, 09:52

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
JodaRulz
 

Re: VBA Makro nur für eine bestimmte Tabelle

Beitragvon DerHoepp » 30. Jun 2021, 10:08

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)
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9848
Registriert: 14. Mai 2013, 11:08

Re: VBA Makro nur für eine bestimmte Tabelle

Beitragvon JodaRulz » 30. Jun 2021, 10:30

Funktioniert einwandfrei!! :D

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

Re: VBA Makro nur für eine bestimmte Tabelle

Beitragvon theoS » 30. Jun 2021, 20:46

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
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 5733
Registriert: 19. Apr 2008, 00:14


Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste