Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

excel - userform - checkbox

kondzio18 06 Sty 2014 18:35 2640 29
  • #1 06 Sty 2014 18:35
    kondzio18
    Poziom 10  

    zrobiłem parę checkboxów i chciałbym, że jeżeli jakiś checkbox będzie miał przypisane true, to żeby jego nazwa została wypisana do arkusza, a jeżeli ten checkbox będzie miał wartość false, to żeby jego nazwa została usunięta z tego arkusza.

    Problem się robi, gdy jest tych checkboxów z 30 i każdy z nich jest wciskany i odciskany w różnej kolejności. Mam nadzieję, że mnie zrozumieliście i jesteście mi w stanie pomóc :)

    0 29
  • #2 06 Sty 2014 20:50
    JRV
    Specjalista - VBA, Excel

    kondzio18 napisał:
    będzie miał wartość false, to żeby został on usunięty z tego arkusza.
    Jeśli dobrze rozumiem poprawnie, a następnie klikając na nich, wszystkie one powinny zniknąć . Dlaczego je tworzyć ?

    0
  • #3 06 Sty 2014 21:11
    kondzio18
    Poziom 10  

    Pole wyboru mam w VBA userform i powiedzmy, że teraz zaznaczę 5 pierwszych pól i w tym momencie chciałbym, aby nazwy tych pól (checkbox'ów) zostały wypisane do arkusza, a jeżeli je odznaczę w userform, to żeby zostały usunięte z arkusza :)

    Czyli np:

    1. Zaznaczam checkbox o nazwie "elektroda"
    2. i po jakiejś następnej akcji nazwa checkbox'a "elektroda" zostaje wypisana do arkusza w excelu,
    3. Odznaczam checkbox o nazwie "elektroda"
    4. napis "elektroda" zostaje usunięta z arkusza

    excel - userform - checkbox

    PS.:

    Cytat:
    Jeśli dobrze rozumiem poprawnie, a następnie klikając na nich, wszystkie one powinny zniknąć . Dlaczego je tworzyć ?


    Nie chodzi o to , aby checkbox'y zostały usunięte z userform, tylko aby ich nazwy wypisane do arkusza zostały usunięte, gdy się odznaczy checkbox'a.

    0
  • #4 06 Sty 2014 21:25
    JRV
    Specjalista - VBA, Excel

    dla każdygo čekboksa musi być

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    i w ogólnom modułu
    Kod: vb
    Zaloguj się, aby zobaczyć kod



    CheckBox1 CheckBox2 CheckBox3 a t.d.

    -1
  • #5 06 Sty 2014 21:30
    adamas_nt
    Moderator Programowanie

    Dlaczego sprawdzać wszystkie w pętli? Przecież można przekazać argument (nazwę/indeks kontrolki) do procedury w module...

    0
  • #6 06 Sty 2014 21:33
    kondzio18
    Poziom 10  

    Chętnie sprawdziłbym Pana skrypt, ale nie wiem jak zmienić w tym kodzie, żeby wypisanie nazwy checkboxa dot. innego arkusza np. "gotowe", bo w tym przypadku nawiązuje chyba do aktualnie otwartego.

    0
  • #7 06 Sty 2014 21:39
    JRV
    Specjalista - VBA, Excel

    With Sheets("gotowe")

    Dodano po 2 [minuty]:

    adamas_nt napisał:
    można przekazać argument

    kondzio18 napisał:
    jest tych checkboxów z 30

    mniej pisania

    0
  • #8 06 Sty 2014 21:41
    kondzio18
    Poziom 10  

    Czyli to powinno wyglądać tak ? Jeżeli tak, to mam błąd w For Each chb In UserForm1.Controls. (UserForm1 zmieniłem na userform, gdzie znajduje się checkbox (czyli w moim przypadku FrmKomputeryStacjonarne, ale mimo to nadal jest błąd)

    excel - userform - checkbox excel - userform - checkbox

    Bardzo proszę o poprawę napisanego kodu, bądź wskazania błędu.

    0
  • #9 06 Sty 2014 22:01
    JRV
    Specjalista - VBA, Excel

    hmmm
    Rzeczywiście, coś tu jest nie tak

    0
  • #10 06 Sty 2014 22:04
    adamas_nt
    Moderator Programowanie

    Nazwa formularza w procedurze "Idz"?

    0
  • #11 06 Sty 2014 22:06
    kondzio18
    Poziom 10  

    Cytat:
    Nazwa formularza w procedurze "Idz"?

    FrmKomputeryStacjonarne

    0
  • #12 06 Sty 2014 22:13
    JRV
    Specjalista - VBA, Excel

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    tak działa ale tylko w przypadku pól wyboru w formie

    -1
  • #13 06 Sty 2014 22:38
    adamas_nt
    Moderator Programowanie

    Zdecydowanie obstawiam przekazanie nazwy. W przeciwnym wypadku sprawdzane będą wszystkie kontrolki. Można ew. sprawdzić typ w instrukcji warunkowej (powinna być deklaracja 'Dim chb As Control')

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    -1
  • #14 06 Sty 2014 22:44
    JRV
    Specjalista - VBA, Excel

    adamas_nt napisał:
    If TypeName(chb) = "Checkbox" And chb.Value Then

    tuż przed tym przyszedł
    działa bez zgłoszenia chb as Control
    For Each chb In UserForm1.Controls

    0
  • #15 07 Sty 2014 15:42
    kondzio18
    Poziom 10  

    Dziękuję Wam za zaangażowanie, aczkolwiek kiedy zaznaczam pierwszy checkbox (userform: FrmKomputeryStacjonarne), to wyskakuje błąd w skrypcie: "Run-time error '424': Object required" i jest zaznaczony ten kawałek skryptu: "For Each chb In UserForm1.Controls"

    excel - userform - checkbox excel - userform - checkbox

    0
  • #16 08 Sty 2014 15:18
    JRV
    Specjalista - VBA, Excel

    Witam
    zmienić userform1 na userform, czy cokolwiek jest formularz, w którym jest checkBox
    Być może jest to FrmKomputeryStacjonarne
    i lepiej - If Typename(chb)="CheckBox" And chb.Value Then

    0
  • #17 08 Sty 2014 16:47
    kondzio18
    Poziom 10  

    kolejne błędy, które pokazuje vba:

    Cytat:
    If chb.Value Then
    - komunikaT:

    Run-time error '438':

    Object doesn't support this property or method

    taki sam komunikat wyskakuje przy wraunku:
    Cytat:
    If TypeName(chb) = "Checkbox" And chb.Value Then



    Cały kod:

    Code:
    Sub Idz()
    
    Dim r As Long
    With Sheets("gotowe")
        .Columns(1).ClearContents
        For Each chb In FrmKomputeryStacjonarne.Controls
            If TypeName(chb) = "CheckBox" And chb.Value Then
                r = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                .Cells(r, 1) = chb.Name
            End If
        Next
    End With
    End Sub

    0
  • #18 08 Sty 2014 17:09
    JRV
    Specjalista - VBA, Excel

    Chcieliby plik przed oczami
    W części formularza, Export w plik

    0
  • #20 08 Sty 2014 18:15
    JRV
    Specjalista - VBA, Excel

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    dostosowane

    -1
  • #21 08 Sty 2014 18:35
    kondzio18
    Poziom 10  

    JRV - Dziękuję Ci bardzo za pomoc i za poświęcony mi czas. Skrypt jak najbardziej działa i robi dokładnie to o co mi chodziło :) Jeszcze raz dziękuję i mam ostatnie pytanie do Ciebie: w tym momencie tworzenie zaczyna się od komórki A2 ... A3... A4... itd.. Jak przykładowo zmienić na inną komórkę ? np. od B5 ?

    0
  • #22 08 Sty 2014 18:51
    JRV
    Specjalista - VBA, Excel

    Wpisz nagłówka(lub nieco) w B4
    Zamień
    .Columns(1).ClearContents na .Range("B5:B1000").ClearContents
    r = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 na r = .Cells(.Rows.Count, 2).End(xlUp).Row + 1
    .Cells(r, 1) = chb.Name na .Cells(r, 2) = chb.Name

    albo (bez naglowka) i lepiej

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    -1
  • #23 08 Sty 2014 19:43
    kondzio18
    Poziom 10  

    Dziękuję skrypt jest oczywiście poprawny i wszystko śmiga, aż przyjemnie :) A czy możliwe jest, że obok tworzącego napisu checkboxa był inny ? oto przykład:

    excel - userform - checkbox

    tworzy się: option_komputery_stacjonarne_1 i żeby obok niego był napis "Komputery Stacjonarne"

    //edit: Poradziłem sobie :)

    .Cells(r, 1) = "Komputery stacjonarne"

    Może mi Pan jeszcze powiedzieć, dlaczego gdy odznaczam checkboxa to napis "Komputery stacjonarne" zostają?

    0
  • #24 08 Sty 2014 19:50
    JRV
    Specjalista - VBA, Excel

    Ale to będzie 'pomógł' ? :)

    0
  • #25 08 Sty 2014 20:02
    kondzio18
    Poziom 10  

    Oczywiście, jeżeli tylko można to odpowie Pan na edit wyżej ? :D bo to dla Pana pewnie sekundka .

    0
  • #26 08 Sty 2014 20:08
    JRV
    Specjalista - VBA, Excel

    Trzeba Set bs = Sheets("gotowe").Range("A5:B100").Cells

    dalej
    bs(r,1)="KomputeryStacjonarne"
    bs(r,2) = chb.Name

    0
  • #27 08 Sty 2014 20:14
    kondzio18
    Poziom 10  

    Za chwilę sprawdzę.

    0
  • #28 08 Sty 2014 20:19
    JRV
    Specjalista - VBA, Excel

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    -1
  • #29 08 Sty 2014 20:21
    kondzio18
    Poziom 10  

    Jak najbardziej działa ! :) Dziękuję! Błąd wynikał z głupoty :) Zapomniałem, że zmieniłem nazwę arkusza :)

    0
  • #30 08 Sty 2014 20:28
    JRV
    Specjalista - VBA, Excel

    Sheets("gotowe").Range("A5:B100") - zakres, gdzie to wszystko będzie. Można zmniejszyć-jeśli CheckBox'ow 10 maksymalna - A5:B15

    0