Laufzeitfehler 1004 und 438
19.05.2016 17:40:38
TomTom
ich habe ein Formular in Excel 2010 erstellt, welches die Eingaben des Anwenders vor Speichern der Datei überprüft. Also nichts neues in der Excel-Welt.
Der Code funktioniert soweit auch. Wenn man das Excel-File speichern möchte und die zu überprüfenden Zellen nicht (korrekt) ausgefüllt sind, erscheint die dazugehörige MsgBox.
Möchte ich den Code allerdings im VBA-Editor speichern, erscheint bei folgenden Abschnitten eine Fehlermeldung.
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, cancel As Boolean)
Dim Pflichtbereich As Range
Dim Anzahl As Integer
Set Pflichtbereich = Sheets(1).Range("A8,A12,D12,A14,F14")
Anzahl = Pflichtbereich.Cells.Count
If Application.WorksheetFunction.CountA(Pflichtbereich) Anzahl Then
MsgBox "Bitte füllen Sie zuerst alle Pflichtfelder aus!", vbOKOnly +
vbInformation, "Datei wurde NICHT gespeichert!"
cancel = True
Exit Sub
End If
If Sheets(1).Option1.Value = False And Sheets(1).Option2.Value = False then
MsgBox "Bitte eine der beiden Optionen wählen!", vbOKOnly+
vbInformation, "Datei wurde NICHT gespeichert!"
cancel = True
Exit Sub
End If
End Sub
Laufzeitfehler 1004: Anwendungs- oder objektdefinierter FehlerFür die Zeile
Set Pflichtbereich = Worksheets("Formular").Range("A8,A12,D12,A14,F14")
Laufzeitfehler 438: Objekt unterstützt diese Eigenschaft oder Methode nicht
Für die Zeile
If Sheets(1).Option1.Value = False And Sheets(1).Option2.Value = False then
Bei der ersten Fehlermeldung vermute ich den Fehler beim Objekt Range. Für eine einzelne Zellenangabe (zb. "A8") erscheint keine Fehlermeldung. Vielleicht liegt es auch daran, dass einige der Zellen verbunden sind ("A8" ist tatsächlich eine verbundene Zelle von "A8:C8") oder dass eine Zelle eine "Dropdown-Liste", erzeugt über Datenüberprüfung, enthält.
Bei der zweiten Fehlermeldung handelt es sich um mehrere ActiveX-Kontrollkästchen, die überprüft werden sollen. Wenn keines der Kontrollkästen aktiviert ist, also kein Haken gesetzt, dann erscheint die MsgBox. Die Kontrollkästchen sind korrekt umbenannt und laut Google müsste man das Objekt auch über .Value ansprechen können. Ich vermute, dass ich das Objekt noch irgendwo definieren muss, ich weiß nur nicht wie.
Der Code steht übrigens gänzlich in "Diese Arbeitsmappe".