AW: Checkbox und Zellabfrage startet Makro
21.02.2017 01:14:42
fcs
Hallo Andi,
wenn du eine Beispiel Datei mit Tabellenblatt und vorhandenem Userform hier hochlädst, dann kann dir leichter geholfen werden.
Unload und wieder Laden eines Userforms vom Userform aus kann zu Problemen führen weil verschachtelte Aufrufe erfolgen.
Mit etwas komplizierterer Ablaufsteuerung kann man das UF zunächst nur Ausblenden, in dem Makro mit der Show-Anweisung eine Prüfung durchführen und nach dem Unload des Userforms wieder vor sie Show-Anweisung springen.
Übersichtlicher ist es das Userform nicht zu verlassen und die Werte der Steuerelemente zurückzusetzen für die nächste Eingabe.
Nachfolgend prinzipielle Beispiel-Makros zu deinen Fragen.
LG
Franz
'########## Code in einem allgemeinen Modul oder im Userform-Modul ##########
Public Sub Weiter()
Dim wks As Worksheet
Dim Zeile As Long
Set wks = ActiveSheet
Zeile = ActiveCell.Row + 1
With wks
If .Cells(Zeile, 1).Value = "" And IsNumeric(.Cells(Zeile - 1, 1)) Then ' erhöhe in A die _
Zahl um +1
.Cells(Zeile, 1).Value = .Cells(Zeile - 1, 1).Value + 1
Else
.Cells(Zeile, 1).Value = 1 'Startwert setzen
End If
End With
Cells(Zeile, 3).Select
ActiveWindow.ScrollRow = Zeile - 1
End Sub
'########## Code im Userform-Modul ##########
Private Sub Reset_Userform()
'Inhalte in Steuerelementen des Userforms zurücksetzen
'Falls bestimmte Steuerelemete Vorgabewerte bekommen sollen müssen diese am _
Ende des Makros gesetzt werden
'Achtung bei Verwendung von Change-Ereignis-Makro von Steuerlementen muss man _
ggf. dafür sorgen, dass diese in geeigneter form ausgeführt werden
Dim objControl As Control
For Each objControl In Me.Controls
Select Case LCase(TypeName(objControl))
Case "textbox"
objControl.Object.Value = ""
Case "checkbox"
objControl.Object.Value = False
Case "optionbutton"
objControl.Object.Value = False
Case "listbox"
objControl.Object.ListIndex = -1
Case "combobox"
With objControl.Object
.Text = ""
.ListIndex = -1
End With
Case Else
End Select
Next
End Sub
Private Sub weiterFragen()
'Abfrage für weiter
Dim wks As Worksheet
Dim Zeile As Long
Set wks = ActiveSheet
Zeile = ActiveCell.Row
With wks
If Me.CheckBox1 = True Then
If .Cells(Zeile, 3) "" And _
.Cells(Zeile, 6) "" Then
If MsgBox("Soll Makro ""Weiter"" ausgeführt werden?", _
vbQuestion + vbOKCancel, "W E I T E R ?") = vbOK Then
Call Weiter
Call Reset_Userform
Call UserForm_Initialize 'Falls Prozedur vorhanden
End If
Else
MsgBox "Bedingungen für Weiter sind nicht erfüllt"
Exit Sub
End If
End If
End With
End Sub