Einige activex ComboBox abfragen unter Excel2007 (VBA)

Pr3d4tor, Montag, 09.12.2019, 17:11 (vor 45 Tagen)

Hallo zusammen,

ich bin ebenfalls ein totaler VBA Neuling und leider gehöre ich zu den Ungeduldigen
User ;-) Daher Arbeite ich mehr nach "Learning by doing"

Da ich seit kurzem Frachtbriefe erstellen muss wollte ich mir diese Aufgabe durch Excel erleichtern. Dafür gibt es eine Arbeitsmappe mit 3 Blättern auf denen bei 2 davon einige Abfragen sowie Makros genutzt werden sollen.

Die beiden Arbeitsblätter sind so gut wie Identisch, haben jeweils 3 ActiveX ComboBoxen welche als "Pflichtfeld" Abfrage dienen sollen. Wenn alle 3 ComboBoxen "ausgefüllt" wurden, soll der Druck über einen Button möglich sein, wenn nicht, wird eine Meldung ausgegeben und der Druck verhindert. Vor dem schließen der Datei sollen die ComboBoxen zurück gesetzt werden.

Nach langem Suchen, Testen und einem freundlichen User ist folgender Code zusammen gekommen.

 
' Event vor dem Drucken
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    'Überprüfe die Felder und nutze den Rückgabewert der Function als Wert der Cancel-Property
    Cancel = Not ValidateFormFields
End Sub
'Button-Prozedur für den Druck-Button
Sub btnPrintClick()
    Application.Dialogs(xlDialogPrint).Show
End Sub
 
' Function zum Validieren der Comboboxen
Function ValidateFormFields() As Boolean
    Dim arrControls As Variant
    ' Standard Rückgabewert festlegen
    ValidateFormFields = True
    ' wir arbeiten auf dem ersten Sheet
    With Sheets(1)
        ' Comboboxen die überprüft werden sollen
        arrControls = Array(.ComboBox1, .ComboBox2, .ComboBox3)
        For Each ctrl In arrControls
            If ctrl.ListIndex = -1 Then
                MsgBox "Mindestens ein Pflichtfeld wurde nicht ausgefült!", vbExclamation
                ' Ergebnis der Function ist False weil ein Feld nicht die Anforderungen erfüllt
                ValidateFormFields = False
                Exit Function
            End If
        Next
    End With
End Function
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.EnableEvents = False
    resetFormFields
    ThisWorkbook.Save
    Application.EnableEvents = True
End Sub
 
' Sub die entsprechend angegebene Comboboxen zurücksetzt
Sub resetFormFields()
    Dim arrControls As Variant
    ' wir arbeiten auf dem ersten Sheet
    With Sheets(1)
        ' Comboboxen die zurückgesetzt werden sollen
        arrControls = Array(.ComboBox1, .ComboBox2, .ComboBox3)
        For Each ctrl In arrControls
            ' Combobox zurücksetzen
            ctrl.ListIndex = -1
        Next
    End With
End Sub
End Function
 

Leider bekomme ich beim klicken auf den "Druck Button" einen Laufzeitfehler "438" mit der Meldung: Objekt unterstützt diese Eigenschaft oder Methode nicht.

Kein mir jemand Sagen wieso nicht? Bzw. wo der Fehler liegt und wie ich diesen Korrigieren kann? Spaßeshalber habe ich mal alle "With Sheets(1)" durch "With ActiveSheet" ersetzt. Dann funktioniert der Code zwar nur schmiert Excel dann nach 2 oder 3 mal "schließen/öffnen" der Datei ab.

VG

RSS-Feed dieser Diskussion
powered by my little forum