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: 74046 Skopiuj do schowka UserForm - Error 91
Autor Wiadomość
arturpl 
Stały bywalec Excelforum


Wersja: Win Office 365
Pomógł: 1 raz
Posty: 298
Wysłany: 25-01-2023, 22:54   UserForm - Error 91

Chciałem sobie ułatwić życie znalazłem na Youtube film 'https://www.youtube.com/watch?v=m-mMYtIjOA8&t=198s jak zrobić procedurę która buduje dane do comboboxa, ale u mnie coś nie pyka, nie wiem czego zapomniałem, co zgubiłem ale kod wskazuje na błąd " Run-time Error '91' Object-variable or With block variable not set", możecie zerknąć ?

dodatkowo chciałbym aby procedura zwracała w cboWOJ.value to co jest w 1 kolumnie, a w Comboboxie wyświetlała nazwę województwa (2 kolumnę) Jak to zrobić?

test.xlsb
Pobierz Plik ściągnięto 7 raz(y) 30.38 KB

ID posta: 424619 Skopiuj do schowka
 
 
Tajan


Pomógł: 5234 razy
Posty: 11412
Wysłany: 25-01-2023, 23:53   

Mocno tu namieszane. Nie sprawdzałem całości, ale na początek widać że w funkcji turnRangeIntoColtn brakuje na końcu linii przypisującej jej wartość:
Kod:
 Set turnRangeIntoColtn = coltn
Dalej, w procedurze AddRangeToCbo, brakuje pętli nadającej liście combobox wartości:
Kod:
   For i = 1 To coltn.Count
        cbo.AddItem coltn(i)
    Next i

Dalej nie sprawdzałem, bo moim zdaniem, ten kod jest zbyt skomplikowany do twoich zamierzeń.
Tu wystarczy procedurę UserForm_Initialize skonstruować w taki sposób:
Kod:
Private Sub UserForm_Initialize()

    With cboWOJ
       .ColumnCount = 2
       .TextColumn = 2
       .BoundColumn = 1
       .ColumnWidths = Int(.Width * 0.2) & ";" & Int(.Width * 0.7)
       .List = shWOJ.ListObjects("tbWOJ").DataBodyRange.Value
    End With

End Sub
i będzie działać jak tego oczekujesz...
ID posta: 424620 Skopiuj do schowka
 
 
arturpl 
Stały bywalec Excelforum


Wersja: Win Office 365
Pomógł: 1 raz
Posty: 298
Wysłany: 26-01-2023, 04:57   

Dziękuję nie wiem jak mogłem to przeoczyć :( cytując klasyka "oczywista, oczywistość" :)
Tak zgadzam w tym przypadku to jest pójście z przysłowiową armatą na muchę, i tu twoje rozwiązanie jest prostsze, ale już przy kilku(nastu) comboboxach w jednym userformie robi różnice, i chyba trudniej o pomyłkę :) Dlatego stwierdziłem że wykorzystam to przy czynnościach powtarzalnych. W przykładzie był jeden combobox ale właśnie zamierzam to wykorzystać przy userformie z wieloma comboboxami, do tego jakby się udało zależnymi od siebie :)
Nadal jednak nie wiem jak w tych 'moich' procedurach i funkcji uzyskać to co chciałem finalnie czyli żeby w cbo TextColumn było 2 kolumną a BoundColumn pierwszą kolumną (w tym przypadku z tbWOJ).
ID posta: 424623 Skopiuj do schowka
 
 
arturpl 
Stały bywalec Excelforum


Wersja: Win Office 365
Pomógł: 1 raz
Posty: 298
Wysłany: 26-01-2023, 06:30   

W przypadku zależnych comboboxów na zdarzeniu _change() tego wyżej będę chciał najpierw przefiltrować dane z kolejnego zakresu i skopiować wynik w inne miejsce a potem użyje w procedurze AddRangeToCbo() jako parametry: zakresu skopiowanego i tego comboboxa niżej.

Do tego mi potrzebne value z innej kolumny niż to co się wyświetla, bo w kolejnym zakresie (powiaty), mam kolumny woj, pow, i nazwa. będę filtrował po kolumnie "woj" a ona jest wypełniona wartościami 02, 04, 06, 08, 10 itd.

Nie wiem czy dobrze kombinuje?
ID posta: 424624 Skopiuj do schowka
 
 
master_mix 
Excel Expert



Wersja: Win Office 365
Pomógł: 1216 razy
Posty: 2319
Wysłany: 26-01-2023, 09:47   

niezależnie jak ustawisz widok listy w combobox,
nie sprawdzaj własności.Value combo tylko element listy
np.
Kod:
Private Sub cboWOJ_Change()
    Debug.Print Me.cboWOJ.List(Me.cboWOJ.ListIndex, 0)
    Debug.Print Me.cboWOJ.List(Me.cboWOJ.ListIndex, 1)
End Sub

Private Sub UserForm_Initialize()
    Me.cboWOJ.List = [tbWOJ].Value
End Sub
_________________

Podejmę współpracę (pracę)
Programowanie C#, Android, iOS, VB.NET, VBA, ASP.NET Core, WPF, Xamarin, Power Platforms, XAML, MVC, LINQ, Entity Framework. Bazy danych SQL Server, Oracle, MySQL, Firebird
Wrocław i okolice …lub zdalnie.
ID posta: 424628 Skopiuj do schowka
 
 
Tajan


Pomógł: 5234 razy
Posty: 11412
Wysłany: 26-01-2023, 09:55   

arturpl napisał/a:
Nie wiem czy dobrze kombinuje?


Dobrze kombinujesz :-) ale twój kod do takich kombinacji wymaga sporo przeróbek, bo jest dostosowany do pobierania danych tylko do kontrolek jednokolumnowych oraz nie ma mechanizmu filtrowania danych.

Co do jego prostoty... Zauważ, że tak naprawdę to wykonuje on to co w moim kodzie robi linia:
Kod:
.List = shWOJ.ListObjects("tbWOJ").DataBodyRange.Value
Nic więcej.
Ponadto, w przypadku mojej procedury, to tak naprawdę linie:
Kod:
       .ColumnCount = 2
       .TextColumn = 2
       .BoundColumn = 1
       .ColumnWidths = Int(.Width * 0.2) & ";" & Int(.Width * 0.7)
są zbędne, bo to wszystko można ustawić we właściwościach kontrolki, już na etapie projektowania.

O ile dobrze pamiętam, to na forum kilkukrotnie przewijał sią temat combobox'ów zależnych więc jeżeli dobrze poszukasz, to może znajdziesz prostsze rozwiązanie.

Oczywiście, możesz próbować wykorzystywać początkowy kod, ale w takim przypadku, moim zdaniem, należy przebudować funkcję "turnRangeIntoColtn", tak aby mogła pobierać dane z wielu kolumn oraz procedurę "AddRangeToCbo" aby te ta dane dodawała do kontrolki wielokolumnowej, uwzględniając ewentualne filtrowanie.
ID posta: 424629 Skopiuj do schowka
 
 
J_B 
Excel Expert


Wersja: Win Office 2016
Pomógł: 638 razy
Posty: 1529
Wysłany: 26-01-2023, 10:35   

arturpl napisał/a:
W przykładzie był jeden combobox ale właśnie zamierzam to wykorzystać przy userformie z wieloma comboboxami, do tego jakby się udało zależnymi od siebie :)

Nie wiem czy dobrze odczytuję twoje potrzeby
Ale sprawdź załącznik

WojPow.xlsm
Pobierz Plik ściągnięto 10 raz(y) 39.22 KB

ID posta: 424633 Skopiuj do schowka
 
 
arturpl 
Stały bywalec Excelforum


Wersja: Win Office 365
Pomógł: 1 raz
Posty: 298
Wysłany: 26-01-2023, 20:24   

J_B napisał/a:
arturpl napisał/a:
W przykładzie był jeden combobox ale właśnie zamierzam to wykorzystać przy userformie z wieloma comboboxami, do tego jakby się udało zależnymi od siebie :)

Nie wiem czy dobrze odczytuję twoje potrzeby
Ale sprawdź załącznik


Przy próbie uruchomienia UF dostaje Run-Time ERROR 3706 Nie można odnaleźć dostawcy...
ID posta: 424669 Skopiuj do schowka
 
 
J_B 
Excel Expert


Wersja: Win Office 2016
Pomógł: 638 razy
Posty: 1529
Wysłany: 26-01-2023, 20:58   

arturpl napisał/a:
Nie można odnaleźć dostawcy...

Podmień kod
Kod:
'    MyConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
'                "Data Source=" & ThisWorkbook.FullName & ";" & _
'                "Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
    MyConn.Open = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                 "Data Source=" & ThisWorkbook.FullName & ";" & _
                 "Extended Properties=""Excel 12.0 Macro;HDR=yes"""
ID posta: 424671 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.wip.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