03.11.2017, 19:42
Guten Abend,
habe folgenden Code von Hajo Ziplies im Einsatz und möchte ihn dahingehend ändern, dass ich in einer intelligenten Tabelle das Datum in einer definierten Spalte eintrage und nicht automatisch in die letzte Spalte.
Meine Versuche der Umstrickerei scheitern wahrscheinlich an meiner Unerfahrenheit bei ListObjekts, da ich wahrscheinlich immer falsch adressiere
(Die Meldung MsgBox ist für mich in diesem Fall unnötig.)
Dank im Voraus für Eure grauen Zellen
Michael
Hier Hajos Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'***********************************************
'* H. Ziplies *
'* 08.11.12 *
'* erstellt von HajoZiplies@web.de *
'* http://Hajo-Excel.de/
'***********************************************
' wird im definierten Bereich ein Wert geändert,
' wird in der nächsten letzten Spalte das Datum und Uhrzeit eingetragen
Dim RaBereich As Range ' Variable für überwachten Bereich
Dim RaZelle As Range ' Variable für Zelle die zur Zeit bearbeitet wird
Dim LoLetzte As Integer ' Variable für letzte Spalte
Set RaBereich = Range("VBA_TAB_1[[Wert_4]:[Wert_5]]") ' Bereich meiner Tabelle den ich prüfen will
' prüfen ob veränderte Zelle im überwachten Bereich
Set RaBereich = Intersect(RaBereich, Range(Target.Address))
If Not RaBereich Is Nothing Then
Application.EnableEvents = False ' Reaktion auf Eingabe abschalten
Application.ScreenUpdating = False ' Bildschirm abschalten
For Each RaZelle In RaBereich ' Schleife über alle veränderten Zellen im überwachten Bereich
With RaZelle
' letzte belegte Spalte, unabhängig von Excelversion
LoLetzte = IIf(IsEmpty(Cells(.Row, Columns.Count)), Cells(.Row, _
Columns.Count).End(xlToLeft).Column, Columns.Count) + 0
If LoLetzte > Columns.Count Then
MsgBox " Keine Spalte mehr frei in Zeile " & .Row
Else
Cells(.Row, LoLetzte) = Now
Cells(.Row, LoLetzte).NumberFormat = "dd/mm/yy hh:mm"
Cells(.Row, LoLetzte).EntireColumn.AutoFit
End If
End With
Next RaZelle
Application.ScreenUpdating = True ' Bildschirm einschalten
Application.EnableEvents = True ' Reaktion auf Eingabe einschalten
End If
Set RaBereich = Nothing ' Variable leeren
End Sub
habe folgenden Code von Hajo Ziplies im Einsatz und möchte ihn dahingehend ändern, dass ich in einer intelligenten Tabelle das Datum in einer definierten Spalte eintrage und nicht automatisch in die letzte Spalte.
Meine Versuche der Umstrickerei scheitern wahrscheinlich an meiner Unerfahrenheit bei ListObjekts, da ich wahrscheinlich immer falsch adressiere
(Die Meldung MsgBox ist für mich in diesem Fall unnötig.)
Dank im Voraus für Eure grauen Zellen
Michael
Hier Hajos Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'***********************************************
'* H. Ziplies *
'* 08.11.12 *
'* erstellt von HajoZiplies@web.de *
'* http://Hajo-Excel.de/
'***********************************************
' wird im definierten Bereich ein Wert geändert,
' wird in der nächsten letzten Spalte das Datum und Uhrzeit eingetragen
Dim RaBereich As Range ' Variable für überwachten Bereich
Dim RaZelle As Range ' Variable für Zelle die zur Zeit bearbeitet wird
Dim LoLetzte As Integer ' Variable für letzte Spalte
Set RaBereich = Range("VBA_TAB_1[[Wert_4]:[Wert_5]]") ' Bereich meiner Tabelle den ich prüfen will
' prüfen ob veränderte Zelle im überwachten Bereich
Set RaBereich = Intersect(RaBereich, Range(Target.Address))
If Not RaBereich Is Nothing Then
Application.EnableEvents = False ' Reaktion auf Eingabe abschalten
Application.ScreenUpdating = False ' Bildschirm abschalten
For Each RaZelle In RaBereich ' Schleife über alle veränderten Zellen im überwachten Bereich
With RaZelle
' letzte belegte Spalte, unabhängig von Excelversion
LoLetzte = IIf(IsEmpty(Cells(.Row, Columns.Count)), Cells(.Row, _
Columns.Count).End(xlToLeft).Column, Columns.Count) + 0
If LoLetzte > Columns.Count Then
MsgBox " Keine Spalte mehr frei in Zeile " & .Row
Else
Cells(.Row, LoLetzte) = Now
Cells(.Row, LoLetzte).NumberFormat = "dd/mm/yy hh:mm"
Cells(.Row, LoLetzte).EntireColumn.AutoFit
End If
End With
Next RaZelle
Application.ScreenUpdating = True ' Bildschirm einschalten
Application.EnableEvents = True ' Reaktion auf Eingabe einschalten
End If
Set RaBereich = Nothing ' Variable leeren
End Sub
Win 10
Office 2010 & 2016
Office 2010 & 2016