ID tematu: 74046
 |
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
|
|
|
 |
|
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
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
|
|
|
 |
|
|
|
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
|
|
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
|