VBA Makro nur für eine bestimmte Tabelle

Antwort erstellen

Smilies
:D :) :( :o :shock: :? 8-) :lol: :x :P :razz: :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :badgrin: :doubt:
BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet
Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: VBA Makro nur für eine bestimmte Tabelle

Re: VBA Makro nur für eine bestimmte Tabelle

Beitrag von 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

Re: VBA Makro nur für eine bestimmte Tabelle

Beitrag von JodaRulz » 30. Jun 2021, 10:30

Funktioniert einwandfrei!! :D

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

Re: VBA Makro nur für eine bestimmte Tabelle

Beitrag von 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)

VBA Makro nur für eine bestimmte Tabelle

Beitrag von 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

Nach oben