Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Worksheet_Change auf form. Tabelle begrenzen

Worksheet_Change auf form. Tabelle begrenzen
17.03.2014 01:25:21
Thorsten
Hallo Nachtschwärmer,
falls noch einer in der Excelwelt unterwegs ist, brauche ich mal wieder Hilfe.
Ich nutze nachstehenden Code und der funktioniert auch. Nur möchte ich nicht, dass dieser im gesamten Tabellenblatt Anwendung findet, sondern nur innerhalb der formatierten Tabelle. Der Name der Tabelle ist "Verkauf".
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDD As Range
Set rngDD = Range("L")
If Intersect(Target, rngDD) Is Nothing Then Exit Sub
Cells(Target.Row, 29) = Date
Cells(Target.Row, 1) = Target.Row + 117232
End Sub
Dazu habe ich probiert vor Range ListObjects("Verkauf"). zu setzen.
Aber das funktioniert nicht.
Wäre super, wenn jemand weithelfen kann.
Gruß Thorsten

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Worksheet_Change auf form. Tabelle begrenzen
17.03.2014 03:42:48
fcs
Hallo Thorsten,
ohne besondere Vorkehrungen läuft dein Makro in eine Endlosschleife.
Hier mit Anpassungen, wie es funktionieren sollte.
Gruß
Franz
'Code unter dem Tabellenblatt mit dem ListObject(Tabelle)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDD As Range
Set rngDD = Me.ListObjects("Verkauf").Range
If Not Intersect(Target, rngDD) Is Nothing _
And Target.Rows.Count = 1 _
And Target.Row > rngDD.Row Then
Select Case Target.Column
Case 1, 29
'do nothing
'Alle Nummern der Spalten, die das Makro ändert, müssen hier als Case angegeben  _
sein
'Sonst kommt es zu einer Endlosschleife des Ereignismakros.
'Alternativ kann man auch mit dem Deaktivieren/AKtivieren der Ereignismakros  _
arbeiten
Case Else
'Application.EnableEvents = False
Me.Cells(Target.Row, 29) = Date
Me.Cells(Target.Row, 1) = Target.Row + 117232
'Application.EnableEvents = True
End Select
End If
End Sub

Anzeige
AW: Worksheet_Change auf form. Tabelle begrenzen
17.03.2014 21:03:44
Thorsten
Hallo Franz,
danke für Hilfe und Vervollständigung des Codes. Was mir alledings fehlt, ist jetzt die zugeordnete Spalte. Jetzt erfolgt ein Eintrag egal in welcher Spalte eine Eingabe erfolgt. Es soll aber nur ein Eintrag erfolgen, wenn in Tabellenspalte "L" eine Eingabe gemacht wird.
In der formatierten Tabelle heißt die Spalte "Marke".
Und dann habe ich noch ein zweites Problem. Das hätte mein Code-Schnipsel natürlich auch nicht gemacht.
Wenn einmal ein Wert (Datum) drin steht, darf dieser per VBA nicht geändert werden. Manuell sollte dies aber möglich sein.
Das Datum gibt in dem Fall das Verkaufsdatum wieder. Auch wenn in dem Datensatz später noch was geändert wird soll dieses erhalten bleiben.
Kannst du hier noch etwas weiterhelfen?
Würde mich sehr freuen,
Gruß Thorsten

Anzeige
AW: Worksheet_Change auf form. Tabelle begrenzen
18.03.2014 02:28:44
fcs
Hallo Thorsten,
mit Überwachung nur einer Spalte einem Spaltentitel des ListObjects vereinfacht sich das Ganze zu
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDD As Range
'Datum und Zählnummer eintragen, wenn in Spalte "Marke" des Listobjectes "Verkauf" in _
einer Zelle der Wert geändert wird, aber nur dann wenn in Spalte AC noch kein Datum steht.
Set rngDD = Me.Range("Verkauf[Marke]")
If Not Intersect(Target, rngDD) Is Nothing _
And Target.Cells.Count = 1 Then
'Prüfen, ob schon ein Datum in Spalte 29 (AC) eingetragen ist
If IsEmpty(Me.Cells(Target.Row, 29)) Then
Application.EnableEvents = False
Me.Cells(Target.Row, 29) = Date
Me.Cells(Target.Row, 1) = Target.Row + 117232
Application.EnableEvents = True
End If
End If
End Sub
Alternativ mit Angabe einer Spalte des Tabellenblatts wird es geringfügig komplizierter.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDD As Range
With Me.ListObjects("Verkauf").Range
Set rngDD = .Columns(Me.Range("L:L").Column - .Column + 1)
End With
If Not Intersect(Target, rngDD) Is Nothing _
And Target.Cells.Count = 1 _
And Target.Row > rngDD.Row Then
'Prüfen, ob schon ein Datum in Spalte 29 (AC) eingetragen ist
If IsEmpty(Me.Cells(Target.Row, 29)) Then
Application.EnableEvents = False
Me.Cells(Target.Row, 29) = Date
Me.Cells(Target.Row, 1) = Target.Row + 117232
Application.EnableEvents = True
End If
End If
End Sub
Gruß
Franz

Anzeige
Traumhaft - Dankeschön
18.03.2014 10:29:36
Thorsten
Hallo Franz,
traumhaft!
So wie im letzten Beispielistes wie gewollt.
VIelen Dank,
Gruß Thorsten
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige