Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 64088 Skopiuj do schowka VBA select Case i userform
Autor Wiadomość
caelian
Starszy Forumowicz


Pomógł: 1 raz
Posty: 57
Wysłany: 09-02-2019, 20:52   VBA select Case i userform

Witam

trochę minęło od mojego ostatniego postu (dużo się nauczyłem i dużo kombinowałem)
Proszę nie zrozumieć mnie że już mistrzem jestem bo do tego mi daleko...

ale do rzeczy

robię userform w VBA
i o ile opanowałem konstrukcję If dla checkboxa w VBa to jednak uważam iż konstrukcja select case się lepiej do tego nadaje

Zatem moje pytanie:

mam 4 checkboxy w formularzu

nazwijmy je prosto:
1
2
3
4
jak za pomocą
Kod:
select case

case is 1 = true
case is 1 = False
case is 2 = true
case is 2 = false

....

End Select



sprawdzać checkboxy?
bo nie chce mi to działać niestety a wydaje się to bardziej przejrzyste niż robienie osobnych instrukcji if dla każdego checkboxa...
ID posta: 362281 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2624 razy
Posty: 8659
Wysłany: 09-02-2019, 22:10   

W odróżnieniu od OptionButton-ów, gdzie zaznaczony może być tylko jeden w grupie, Checkbox-ów może być zaznaczonych kilka.
Za mało informacji co chcesz uzyskać. Bo konstrukcja Select Case zakończy swoje działanie przy pierwszej napotkanej np. zaznaczonej kontrolce. Nie sprawdzi pozostałych. Inaczej, zakończy działanie przy pierwszym spełnionym warunku. Obojętne czy to będzie badanie True czy False.

Przy OptionButton-ach budujemy w ten sposób
Kod:
  Select Case True
    Case Me.OptionButton1.Value
      Stop
    Case Me.OptionButton2.Value
      Stop
    Case Me.OptionButton3.Value
      Stop
  End Select
A jak ma być przy Checkbox-ach? Chcesz sprawdzać stan każdego, czy chcesz "złapać" ;-) pierwszego zaznaczonego?

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 362285 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2019
Pomógł: 2099 razy
Posty: 6931
Wysłany: 09-02-2019, 22:19   

O ile dobrze Cię zrozumiałem, to konstrukcja Select Case niezbyt się nadaje, bo wybiera ona pierwszy spełniony warunek i z niej wychodzi.
Możesz przelecieć się pętlą po kontrolkach i sprawdzić ich stan - coś w tym stylu:
Kod:
    Dim i As Byte
    For i = 1 To 4
        MsgBox "CheckBox" & i & " = " & Me.Controls("CheckBox" & i).Value
    Next i

Napisałem "O ile dobrze Cię zrozumiałem" bo tego kompletnie nie rozumiem:
Kod:
case is 1 = true
case is 1 = False

Daj jakiś przykład działania w pliku i opisz na czym ci zależy.

Edit: Artik pierwszy :-)
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

Szkolenia z Excela , FB
Office 2019 Professional Plus , Windows 10 x64
Pozdrawiam, były mkkk23 teraz Marecki.
ID posta: 362286 Skopiuj do schowka
 
 
ąćęłńóś
Excel Expert


Pomógł: 193 razy
Posty: 881
Wysłany: 10-02-2019, 01:42   

caelian napisał/a:
wydaje się to bardziej przejrzyste niz robienie osobnych instrukcji if dla kazdego checkboxa

Nie pałaj taką niechęcią do "IFciaka", "chłopina" się przydaje ... i całkiem sprawnie sobie radzi z "wielością w jedności" w przeciwieństwie do "Zaznaczanego przypadku", który lepiej sobie radzi z "jednością w wielości" ... no i "IFciak" nie musi być wcale taki rozwlekły ... wystarczy jeden i pętelka, jak zaznaczył Marecki.
Kod:
Option Explicit

Private Sub CommandButton1_Click()
    Dim abc1, abc2, abc3, abc4, abc5, abc6, abc7, abc8
    With UserForm1
        If .CheckBox1.Value = True Then abc1 = 1 Else abc1 = 0
        If .CheckBox2.Value = True Then abc2 = 1 Else abc2 = 0
        If .CheckBox3.Value = True Then abc3 = 1 Else abc3 = 0
        If .CheckBox4.Value = True Then abc4 = 1 Else abc4 = 0
        If .CheckBox5.Value = True Then abc5 = 1 Else abc5 = 0
        If .CheckBox6.Value = True Then abc6 = 1 Else abc6 = 0
        If .CheckBox7.Value = True Then abc7 = 1 Else abc7 = 0
        If .CheckBox8.Value = True Then abc8 = 1 Else abc8 = 0
    End With
   
    '-----------------------------------------------------------------
   
    Dim i&, idw&
    Dim Czeka_boks ' ... :)) ...
    Dim abc(0 To 7)
   
    Czeka_boks = Array(CheckBox1, CheckBox2, CheckBox3, CheckBox4, CheckBox5, CheckBox6, CheckBox7, CheckBox8)
    idw = UBound(Czeka_boks)
   
    For i = 0 To idw
        If Czeka_boks(i).Value = True Then abc(i) = Czeka_boks(i).Name 'Else abc(i) = 0
    Next
   
    MsgBox "Wcisło nam następujące 'Elementa ptaszkowane':" & vbCrLf & vbCrLf & Join(abc, vbCrLf)
   
    For i = 0 To idw
        Czeka_boks(i).Value = False
    Next
End Sub
ID posta: 362292 Skopiuj do schowka
 
 
caelian
Starszy Forumowicz


Pomógł: 1 raz
Posty: 57
Wysłany: 11-02-2019, 09:11   

Dzięki
problem rozwiązałem inaczej jednak:
Kod:
For Each x In AmortyzacjaPrzyszła.Controls
    If TypeName(x) = "CheckBox" Then
        If x = True Then
            'Cells(2, c) = c
            Cells(20, c) = x.Caption
            c = c + 1
            p = p + 1
           
            Range("T5") = p
           
           
           
        End If
       
        'MsgBox x.Name & " " & x.Value
        'MsgBox x.Caption & " " & x.Value
       
        z = z + 1
       
               
    End If

 
   
   
   
Next x


jednak teraz mam pewien kłopot i nie rozumiem go zupełnie

do podanych komórek w pętli wpisuje nazwę danego checkboxa
Kod:
x.caption

problem w tym że na komputerze w pracy makro te automatycznie włącza funkcje "zawijania tekstu" a na komputerze w domu tego nie robi.
a to jestte same makro - jak to "pokonać"?
ID posta: 362333 Skopiuj do schowka
 
 
ąćęłńóś
Excel Expert


Pomógł: 193 razy
Posty: 881
Wysłany: 11-02-2019, 10:02   

caelian napisał/a:
na komputerze w pracy makro te automatycznie włącza funkcje "zawijania tekstu" a na komputerze w domu tego nie robi

Stało się ... bunt maszyn ... musisz uważać ... maszyna w robocie zyskała "tożsamość" umożliwiającą przejęcie kontroli nad środowiskiem zewnętrznym ... :->
caelian napisał/a:
jak to "pokonać"?

1. np. usunięcie zawijania tekstu w "A1"
Kod:
Range("A1").WrapText = False


2. Wyłączyć prąd (?) ... :-> ;-)
ID posta: 362337 Skopiuj do schowka
 
 
caelian
Starszy Forumowicz


Pomógł: 1 raz
Posty: 57
Wysłany: 11-02-2019, 10:43   dzięki

twoje rozwiązanie działa
ale zrobiłem to inaczej
skopiowałem prawidłowo działający checkbox i kolejno dodawałem tekst skopiowany z wnetrza komórki a nie jak wczesniej kopiujac cala komórkę i wklejajac tekst do Caption.

mam kolejny problem
pole kombi.

Kod:

With OBSZAR
.AddItem.List "obszar 01"
.AddItem.List "obszar 02"
.AddItem.List "obszar 03"
.AddItem.List "obszar 08"
End With

With OBSZAR
.AddItem "obszar 01"
.AddItem "obszar 02"
.AddItem "obszar 03"
.AddItem "obszar 08"
End With


i nic nie działa
w sense lista pola kombi jest ciągle pusta.
ID posta: 362341 Skopiuj do schowka
 
 
Artik 



Wersja: Win Office 365
Pomógł: 2624 razy
Posty: 8659
Wysłany: 11-02-2019, 10:56   

caelian, rozpędziłeś się za bardzo.
Co ma wspólnego ostatni post z konstrukcją Select Case?
Nic.
Proszę nie śmiecić!
Jeżeli w wątku głównym wszystko już jest OK, to proszę założyć nowy wątek na temat AddItem.

Artik
_________________
Persistence is a virtue in the world of programming.
ID posta: 362342 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe