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

VBA Undo ? oder zwischenspeichern? oder direkt?

VBA Undo ? oder zwischenspeichern? oder direkt?
09.05.2014 12:07:28
Matze
Hallo Zusammen,
ich komme leider nicht klar und brauch mal Unterstützung wie ich das Problem umsetzen kann (hatte erst an ein Zwischenspeichern gedacht ,Art Undo Befehl)
Es geht um die Spalte J(10) in dieser werden Mehrarbeitstunden eingetragen
Wird eine Eingabe gemacht, so wird je nach Eintragungen in Spalte D(4) oder Spalte F(6) ein Kommentar gesetzt, (welcher berechnet ist).
Sollte nun schon eine Eingabe in Spalte J(10) gemacht sein und ich entferne diese müssten nun die Kommentare gelöscht werden und die "Orginalzeit" wieder hergestellt werden.
Musterdatei: https://www.herber.de/bbs/user/90598.xlsm
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strCom As String
Dim strCom2 As String
Dim myCom As Object
On Error GoTo ErrorHandler
Application.ScreenUpdating = False
Application.EnableEvents = False
ActiveSheet.Unprotect "matze"
'Teil1
If Not Intersect(Target, Range("H10:I40")) Is Nothing Then
If Target  "" Then
Cells(Target.Row, 3).ClearContents
Cells(Target.Row, 4).ClearContents
Cells(Target.Row, 5).ClearContents
Cells(Target.Row, 6).ClearContents
Cells(Target.Row, 7).ClearContents
Cells(Target.Row, 10).ClearContents
End If
End If
'Teil2
If Not Intersect(Target, Range("J10:J40")) Is Nothing Then 'entnahme Mehrarbeit
If Target  "" And Cells(Target.Row, 4).Value  "" And Cells(Target.Row, 6).Value = "" _
_
Then
Rows(Target.Row).ClearComments          'Kommentare der ganzen Zeile löschen
strCom = Cells(Target.Row, 4).Text
strCom2 = Cells(Target.Row, 10).Text
Set myCom = ActiveSheet.Cells(Target.Row, 4).AddComment 'Kommentar setzen
With myCom                      'Eingabe in Kommentar
.Visible = False
.Text Text:="von Arbeitsende " & strCom & "Uhr wurden " & strCom2 & "  _
Mehrarbeitsstunden abgezogen"
.Shape.Height = 30
.Shape.Width = 180
End With
Cells(Target.Row, 4).Value = Cells(Target.Row, 4).Value - Cells(Target.Row, 10). _
Value 'Spalte D
End If
If Target  "" And Cells(Target.Row, 6).Value  "" Then
Rows(Target.Row).ClearComments          'Kommentare der ganzen Zeile löschen
strCom = Cells(Target.Row, 6).Text
strCom2 = Cells(Target.Row, 10).Text
Set myCom = ActiveSheet.Cells(Target.Row, 6).AddComment
With myCom
.Visible = False
.Text Text:="von Arbeitsende " & strCom & "Uhr wurden " & strCom2 & "  _
Mehrarbeitsstunden abgezogen"
.Shape.Height = 30
.Shape.Width = 180
End With
Cells(Target.Row, 6).Value = Cells(Target.Row, 6).Value - Cells(Target.Row, 10). _
_
Value
End If
End If
ErrorHandler:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Dankend vorab
Gruß Matze

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Undo ? oder zwischenspeichern? oder direkt?
09.05.2014 13:29:51
EtoPHG
Hallo Matze,
probier mal:
    If Not Intersect(Target, Range("J10:J40")) Is Nothing Then 'entnahme Mehrarbeit
' Hier sollte noch geprüft werden of Target.Count = 1, da andernfalls der restliche Code  _
failed!
Dim dJVal As Double
If IsEmpty(Target) Then
With Application
.EnableEvents = False
.Undo
dJVal = Val(Target)
With Target.Offset(0, -4)
If Not .Comment Is Nothing Then
.Comment.Delete
.Value = .Value + dJVal
End If
End With
Target.ClearContents
.EnableEvents = True
End With
End If
Gruess Hansueli

Besser Spät wie nie,...
10.05.2014 22:09:17
Matze
Hallo Hansueli, (Gruß in die Schweiz)
...DANKE,...die Zeilen sind schon soweit OK.
Leider hatte dies : dJVal = Val(Target) keinen Erfolg
Habe daraus ein : dJVal = Target.Value gemacht, dies funktioniert.
In der Targetzelle steht eine Uhrzeit , da macht Val mit numerischen Werten nicht mit, wenn ich die Hilfe richtig verstanden habe, da die Uhrzeit durch einen ":" getrennt ist, liest er nur die Zahl(en) davor aus.
Habe mir dann dort noch die zweite Spalte D über eine weitere If Abfrage dazu gebaut.
so bin ich nun zufrieden, danke nochmals für den Denkanstoß.
Gruß Matze
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige