AW: Fehler im Code
03.03.2023 22:05:56
Yal
Hallo Ralf,
entschuldigung, Ralf, es war nicht meine Absicht, Dich zu bruskieren oder beleidigen, sondern zu erklären, warum Du keine Antwort bekommst.
Denk daran: wenn Du es nicht schaffst, jemand für dein Problem zu interessieren, bleibst Du auf eine Frage ohne Antwort.
Für dein ersten Code hast Du ganz schön viele Zeilen eingesammelt. Der Hinweis "es handelt sich um die Funktion Worksheet_Change von Blatt Kalkulation" wäre hilfreich gewesen. Eine VBA-Projekt lässt sich nicht zwangsläufig an der Stelle öffnen, wo Du das letzte mal etwas gesehen hast.
Verwechsle nicht Quantität und Qualität. Je kürzer dein Code, je weniger Variablen, desto besser. Geb dich nicht zufrieden mit etwas, was funktioniert, sondern nur mit das, was Du selber verstehst und eigenständig wieder implementieren kannst. Kopie-paste aus Internet ist nicht falsch, müsste aber geherrscht sein.
Dein Code könnte so aussehen. Ich habe einige Sachen drin gelassen, die eigentlich auch weg sein sollte. Achte auf ein sauberes Einrücken. Nur so entdeckst Du sofort die falschen If-Then-Else-End If.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Kunu '?
'On Error GoTo Fehler
Const APPNAME = "Worksheet_Change"
Const SpK = 2 'Spalte der Kundennummer 'NICHT VERWENDETE KONSTANTE
Const SpR = 35 'Spalte für Rüstung 'auch nicht verw
Const cZelle_Hausebene = "$C$20"
'Hier ist das Codepane von "Kalkulation". "Kalkulation" ist hier "me"
Set TB = Sheets("Kalkulation")
'Beweis:
MsgBox "Es wurde eine Zelle in """ & Me.Name & """ geändert!" & vbLf & "und zwar " & Target.Address
'MsgBox Target.Address
'NUR, wenn in B3 eine Änderung erfolgt, werden in der Vorlage die Pflichtfelder wieder geleert
Application.EnableEvents = False 'wenn hier Änderung auf das Blatt Kalkulation gemacht wird, wird "Worksheet_Change" gestartet (zweite Ebene), bis zum Abstürzt
If Target.Address = "$B$3" Then
If Sheets("Datenblatt").ProtectContents Then
Sheets("Datenblatt").Range("R1").Formula = "=Kundendatenbank!AG1"
Sheets("Terminvorlage").Range("R1").Formula = "=Kundendatenbank!AG1"
Sheets("Datenblatt").Unprotect "tresor1958"
X = True
End If
End If
'nur bei Änderungen in diesen Zellen auslösen
If Target.Address = cZelle_Hausebene Then
Kunu = Range(cZelle_Hausebene)
Sheets("Datenblatt").Range("R1").Formula = "=Kundendatenbank!AG1"
Sheets("Terminvorlage").Range("R1").Formula = "=Kundendatenbank!AG1"
MsgBox "Du hast die Zelle " & Target.Parent.Name & "!" & Target.Address & " geändert."
End If
'reset
Range(cZelle_Hausebene).Formula = ""
Application.EnableEvents = True
Exit Sub
'*** Fehlerbehandlung
Fehler:
If Err.Number > 0 Then
MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf & "Fehlernummer: " & Err.Number & vbLf & Err.Description
Err.Clear
End If
End Sub
Wie gesagt, das ist dein Code und DU musst wissen, was da passiert, nicht irgendjemand den Du im Internet mit "kannste mal nachschauen" anspricht.
VG
Yal