Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1896to1900
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Worksheet Change im ListObject

Worksheet Change im ListObject
13.09.2022 17:27:21
{Boris}
Hallo zusammen,
bin mit den Listobjects in VBA noch nicht so vertraut.
Möchte gerne per Worksheet-Change innerhalb Eingaben in Spalte 2 und 3 (der DataBodyRange) des Listobjects reagieren.
Wie lautet dafür die beste Abfrage?
Das hier (also jede Spalte einzeln abfragen) sieht irgendwie zu sperrig aus (wenngleich es funktioniert):

Private Sub Worksheet_Change(ByVal Target As Range)
With Me.ListObjects(1).DataBodyRange
If Not Intersect(Target, .Columns(2)) Is Nothing Or Not Intersect(Target, .Columns(3)) Is Nothing Then
'mach was
End If
End With
End Sub
Wie würdet ihr es schreiben (vor allem, wenn es noch mehr Spalten sein können)?
Danke vorab!
VG, Boris

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Worksheet Change im ListObject
13.09.2022 19:22:48
ralf_b
Hallo Boris,
hier ein paar Ideen

If Target.ListObject Is Nothing Then Exit Sub 'wenn außerhalb der Tabelle
With Target.ListObject
' wenn im Bereich von Spalte1 bis X
If Intersect(Target, Range(.ListColumns("Spaltenname1").Range, .ListColumns("SpaltennameX").Range)) Then
'oder
If Not Intersect(Target, Range("Tabelle1[[Spaltenname1]:[SpaltennameX]]")) Is Nothing Then
'wenn in Spalte1 oder Spalte X
If Not Intersect(Target, Union(.ListColumns("Spaltenname1").Range, .ListColumns("SpaltennameX").Range)) Is Nothing Then
'mittels  Prüfung der Spaltennummer der Zellen in der Kopfzeile, wenn die Tabelle nicht bei A anfängt, sonst einfacher nur die Zahlen
With .HeaderRowRange
Select Case Target.Column
Case .Cells(3).Column, .Cells(17).Column
Case Else
End Select
End with
End With

Anzeige
Sehr gut...
13.09.2022 19:26:40
{Boris}
Hi Ralf,
...vielen Dank für die verschiedenen Ansätze!
Hab selbst (zeitgleich mit Dir) noch ne Variante gepostet - aber jetzt habe ich ja genügend Auswahl! :-)
Viele Grüße
Boris
Variante mit Stringvergleich
13.09.2022 19:23:06
{Boris}
Hallo zusammen,
hab selbst nochmal etwas rumgebastelt und bin dabei auf diese Variante gekommen:

Private Sub Worksheet_Change(ByVal Target As Range)
Const sCols As String = ",2,3,5,7," 'in diesen Spalten des Listobjects soll der Code reagieren
Dim C As Range, lngLOCol As Long
With Me.ListObjects(1)
Set C = Intersect(Target, .DataBodyRange)
If Not C Is Nothing Then
'Spalte innerhalb des Listobjects ermitteln
lngLOCol = C.Column - .DataBodyRange.Column + 1
If InStr(1, sCols, "," & lngLOCol & ",") Then
MsgBox "Jetzt passiert was"
End If
End If
End With
End Sub
Wie bewertet ihr dieses Vorgehen? Kann man das (für viele Spalten) so machen oder würdet ihr es anders (wie?) lösen?
https://www.herber.de/bbs/user/155163.xlsm
VG, Boris
Anzeige
AW: Variante mit Stringvergleich
13.09.2022 20:02:09
GerdL
Hi Boris,
bezogen auf deine Eingangsfrage.

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, ListObjects(1).DataBodyRange.Columns(2).Resize(, 2)) Is Nothing = False Then MsgBox "Ping!"
End Sub
Gruß Gerd
Für zusammenhängende Spalten...
13.09.2022 20:16:25
{Boris}
Hi Gerd,
...- und so hatte ich mein Beispiel ja formuliert - eine sehr gute Idee - danke dafür! :-)
VG, Boris
AW: Worksheet Change im ListObject
14.09.2022 11:19:53
snb

Private Sub Worksheet_Change(ByVal Target As Range)
For Each it In Target
If Not Intersect(it, Range("D:E,G:G,I:I"), ListObjects(1).DataBodyRange) Is Nothing Then it.Font.Color = vbCyan
Next
End Sub

Anzeige
Ebenfalls sehr gut!
14.09.2022 11:28:37
{Boris}
Hi,
...noch ne kurze Variante mehr - danke!
VG, Boris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige