Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1352to1356
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 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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige