Hallo liebe VBA-Gemeinde,
als Neuling in VBA habe ich mich an meinem ersten Makro versucht:
Private Sub Worksheet_Change(ByVal Target As Range)
Set myrange = Range("B1:K1000")
Dim R As Integer
R = ActiveCell.Row
If myrange.Cells(R, 1) <> "" And myrange.Cells(R, 5) = "" Then myrange.Cells(R, 5).Value = CDate(Format(Now, "dd.mm.yy hh:mm"))
If myrange.Cells(R, 1) = "A" And myrange.Cells(R, 4) = "" Then myrange.Cells(R, 4).Value = "offen"
If myrange.Cells(R - 1, 1) <> "" And myrange.Cells(R - 1, 5) = "" Then myrange.Cells(R - 1, 5).Value = CDate(Format(Now, "dd.mm.yy hh:mm"))
If myrange.Cells(R - 1, 1) = "A" And myrange.Cells(R - 1, 4) = "" Then myrange.Cells(R - 1, 4).Value = "offen"
If myrange.Cells(R, 4) = "ok" Then myrange.Cells(R, 10).Value = 1
If myrange.Cells(R - 1, 4) = "ok" Then myrange.Cells(R - 1, 10).Value = 1
End Sub
Bei dem zugehörigen Dokument handelt es sich um eine Aufgabenliste.
Die ersten vier Aktionen waren schon vorhanden und funktionieren einwandfrei. Mit den letzten beiden Aktionen soll die Zelle in Spalte K auf 100% gesetzt werden, wenn die Aufgabe abgeschlossen ist (= "ok"). Es wird tatsächlich auch in die Zelle geschrieben, aber danach zeigt Excel in der Statusleiste einige Zehntel Sekunden "berechnen" an und sürzt dann mit der Fehlermeldung
Laufzeitfehler (...)
Die Methode 'Value' für das Objekt 'Range' ist fehlgeschlagen
ab. Es wird mir noch die Auswahl angezeigt, ob ich beenden oder debuggen möchte, aber meist gibt es danach einen crash to desktop.
Folgendes habe ich schon probiert:
- .Value = "1"
- .Value = "100%"
- .Formula = "=1"
- .Value = 1 & (...).NumberFormat = "0%"
- .Formula = "=1" & (...).NumberFormat = "0%"
- In Spalte I statt K schreiben
- In Spalte J schreiben
- nur eine Nachricht anzeigen (msgBox) - funktioniert, ist aber nicht zielführend
Kann mir jemand erklären, wo der Fehler ist und/oder wie ich die gewünschte Funktion realisieren kann?
|