VBA pętla+checkbox

JZ
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:1
0

Cześć,

od dłuższego czasu męczę się z takim, wydawałoby się prostym, zadaniem. Otóż stworzyłam tzw. formularz użytkownika w vba, mam w nim 9 checkboxów oraz commandbutton. Chciałabym, aby wyświetlały się odpowiednie komunikaty (msgbox) przy zaznaczeniach. Tzn. jeśli checkboxy c1-c6 będą zaznaczone, a b1-b3 nie, ma się pokazywać komunikat "TAK", natomiast w każdym innym przypadku "NIE" i ma wracać do formularza. Próbuję na różne sposoby i nie daję rady. Udało mi się, żeby wyświetlał się komunikat TAK, ale kiedy powinien się pokazywać NIE, nie ma nic. Nie potrafię też tego sensownie zapętlić.
Niżej mój kod (jeden z):

Private Sub Gotowe_Click1()

Do Until c1 = True And c2 = True And c3 = True And c4 = True And c5 = True And c6 = True And b1 = False And b2 = False And b3 = False
UsefForm1.Show
If c1 = True And c2 = True And c3 = True And c4 = True And c5 = True And c6 = True And b1 = False And b2 = False And b3 = False Then
MsgBox ("TAK")

Exit Do
Else: MsgBox ("NIE")

'UserForm1.Hide
End If

'Do Until c1 = True And c2 = True And c3 = True And c4 = True And c5 = True And c6 = True And b1 = False And b2 = False And b3 = False

Loop
end sub

Choć on akurat wcale nie działa :(
Potraficie mi pomóc?

DB
  • Rejestracja:około 7 lat
  • Ostatnio:około 4 lata
  • Postów:36
0

Rozumiem, że ma to działać na wywołanie przycisku. Wtedy można jak poniżej. Na przyszłość proponuję formatować kod zarówno w vab jak i postach.

Kopiuj
Private Sub CommandButton1_Click()
    With UserForm1
        If .CheckBox1 = True And .CheckBox2 = True And .CheckBox3 = True And .CheckBox4 = True _
        And .CheckBox5 = True And .CheckBox6 = True And .CheckBox7 = False And .CheckBox8 = False And .CheckBox9 = False Then
            MsgBox "Tak"
        Else
            MsgBox "Nie"
            .Hide
        End If
    End With
End Sub


edytowany 1x, ostatnio: dbuser
JC
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 5 lat
  • Postów:11
0

Można też bez takiego dużego warunku.

Kopiuj
Private Sub CommandButton1_Click()

For Each ctrl In UserForm1.Controls
   If TypeName(ctrl) = "CheckBox" And ((ctrl.Value = False And InStr(ctrl.Name, "c") > 0) Or (ctrl.Value = True And InStr(ctrl.Name, "b") > 0)) Then
        MsgBox "NIE"
        Exit Sub
    End If
Next

MsgBox "TAK"

End Sub

edytowany 3x, ostatnio: JustCuzICan
DB
niekoniecznie, zauważ jest zależność między zaznaczonymi kontrolkami, a nie wszystkie mają być niezaznaczone.
JC
Masz rację, nie zwróciłem na to uwagi. Edytowałem kod, co uważasz?
DB
Jednak zostanę przy moim rozwiązaniu: a) "czytelniejsze" b) łatwiejsze do modyfikacji.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.