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

2 Antworten

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 :)


Zelle als Listobject - ws soll das sein?

agent888 
Fragesteller
 14.05.2016, 16:36

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

Kannst du mir bitte sagen, wie das geht?

0
maximilianus7  14.05.2016, 18:57
@agent888
Sub test()
Set x = ActiveCell
If x.ListObject Is Nothing Then
MsgBox "ausserhalb"
Else
MsgBox "innerhalb"
End If
End Sub
2
Iamiam  14.05.2016, 23:36
@maximilianus7

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.

0
Iamiam  15.05.2016, 10:40
@maximilianus7

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


0
Iamiam  15.05.2016, 10:57
@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 ( | : -  /=═≈~ )

0