Frage von agent888, 100

Wie kann ich in VBA prüfen ob eine Zelle ein ListObject ist?

Hi, wie kann ich in VBA prüfen, ob eine Zelle ein Listobject ist oder nicht? Danke für die Antworten schon im Voraus!

Antwort
von Robsl, 65

Hallo,

ich habe den Vorgang jetzt mal an ein Ereignis (Worksheet_SelectionChange) gebunden und komme zu diesem Ergebnis

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range(UserForm1.ListBox1.RowSource)) Is Nothing Then
    MsgBox "Ist nicht Teil der ListBox"
Else
    MsgBox "Ist Teil der ListBox"
End If
End Sub

Dabei bin ich davon ausgegangen, dass Teil einer ListBox mit ListBox.Datenquelle (RowSource) übersetzt werden muss.

Ich hoffe, meine Vermutung ist richtig :)


Expertenantwort
von Iamiam, Community-Experte für Excel, 46

formal.

Ichj hoffe, der Frager vergibt eine Hilfreichste!

Antwort
von maximilianus7, 52

Zelle als Listobject - ws soll das sein?

Kommentar von agent888 ,

Ich möchte prüfen ob die aktive Zelle ein Teil eines ListObjects ist.

Kannst du mir bitte sagen, wie das geht?

Kommentar von maximilianus7 ,
Sub test()
Set x = ActiveCell
If x.ListObject Is Nothing Then
MsgBox "ausserhalb"
Else
MsgBox "innerhalb"
End If
End Sub
Kommentar von Iamiam ,

DH! auf die Idee wäre ich jetzt nicht gekommen!

Also Listobject ist eine Range, zB Range(A3;A33), kann man dann auch direkt so schreiben anstatt Listobject.

Aber muss es nicht heissen:

if intersect(x, Listobject) is nothing, then

Msgbox "ausserhalb"

else

Msgbox "innerhalb

end if

Meist macht man sogar

  • if Not intersect(x, Listobject) is nothing, then
  • MSGbox "innerhalb"
  • else
  • MSGbox "ausserhalb"
  • end if

    das vermeidet Fehler, wenn zB ein Textfeld, Diagramm oder Grafikobjekt ausgewählt ist.

Kommentar von maximilianus7 ,

ergibt bei mir laufzeit-fehler: objekt erforderlich

Kommentar von maximilianus7 ,

sollte ein kommentar zu Iamiam sein

Kommentar von Iamiam ,

so gehts:

Sub IstZelleTeiEinesBereichs_()

Dim x As Range

Set x = ActiveCell

If Not Intersect(x, Range("A1:A20")) Is Nothing Then

MsgBox "innerhalb"

Else

MsgBox "ausserhalb"

End If

End Sub

War zu faul, das vorher auszuprobieren.

Es müsste auch noch gehen, den Bereich in der MSGbox wiederzugeben:mit
MsgBox "ausserhalb " & Range("A1:A30").address


Kommentar von Iamiam ,

zu letzterem ist es allerdings sinnvoll, auch den Bereich als Variable oben zu setten, damit man dann mehrfach drauf zugreifen kann.

Was ich aber seit Anbeginn vermisse, ist -per Formel oder Makro- zu erkennen, ob die Zelle Teil IRGENDEINES benannten Bereichs und -wenn ja- welches Bereichs ist (in Lotus-123 ging das schon anfang der 90er Jahre!) Vllt hat sich da aber was getan, was ich nicht mitgekriegt habe. Ich müsste in einer Schleife die gesamte Names-Liste durchlaufen lassen und wie oben abtesten. (hätte ich aber vor 20 Jahren gebraucht ( | : -  /=═≈~ )

Keine passende Antwort gefunden?

Fragen Sie die Community