ID tematu: 70583
 |
Dynamiczny UserForm |
Autor |
Wiadomość |
beret
ExcelGaduła 500+

Wersja: Win Office 2007
Pomógł: 13 razy Posty: 784
|
Wysłany: 06-04-2021, 09:33 Dynamiczny UserForm
|
|
|
Spodobał mi się sposób podany przez Tajana, w załączonym pliku, na dynamiczną tabelę w UserForm.
Co zmienić w makrach, aby zamiast 10 TextBox'ów były np 2 CoboBox"y i 8 TextBox'ów ?
Dynamiczna tabela(tj3).xlsm
|
Pobierz Plik ściągnięto 7 raz(y) 31.62 KB |
|
|
 | ID posta:
403225
|
|
|
 |
|
|
|
Tajan

Pomógł: 4767 razy Posty: 10469
|
Wysłany: 06-04-2021, 10:48
|
|
|
W module formularza dodaj funkcję:
Kod: | Private Function NewComboBox(nTop As Long, nLeft As Long) As MSForms.ComboBox
Set NewComboBox = Controls.Add("Forms.ComboBox.1")
With NewComboBox
.Height = ctrlH
.Width = tboxW
.Left = nLeft
.Top = nTop
End With
End Function |
a funkcję CreateNewLIne zmień na przykład w taki sposób: Kod: | Function CreateNewLine() As Klasse1
Dim btnClass As Klasse1
Dim myTop As Long
Dim myLeft As Long
Dim i As Long
Dim comboList1, comboList2
myTop = ctrlTop
myLeft = 5
comboList1 = Array("item1", "item2", "item3", "item4")
comboList2 = Array("item5", "item6", "item7")
Set btnClass = New Klasse1
With btnClass
Set .CmdEventsDown = NewButton(Chr(118), myTop, myLeft): myLeft = myLeft + btnW + ctrlSpc
Set .CmdEventsUp = NewButton(Chr(94), myTop, myLeft): myLeft = myLeft + btnW + ctrlSpc
Set .CmdEventsAdd = NewButton("+", myTop, myLeft): myLeft = myLeft + btnW + ctrlSpc
Set .CmdEventsDel = NewButton("-", myTop, myLeft): myLeft = myLeft + btnW + ctrlSpc
For i = 1 To licz
With .myTextBoxes
Select Case i
Case 1
.Add NewComboBox(myTop, myLeft)
.Item(.Count).List = comboList1
Case 2
.Add NewComboBox(myTop, myLeft)
.Item(.Count).List = comboList2
Case Else
.Add NewTextBox(myTop, myLeft)
End Select
myLeft = myLeft + tboxW
End With
Next i
End With
Set CreateNewLine = btnClass
End Function |
|
|
 | ID posta:
403230
|
|
|
 |
|
|
beret
ExcelGaduła 500+

Wersja: Win Office 2007
Pomógł: 13 razy Posty: 784
|
Wysłany: 06-04-2021, 11:52
|
|
|
Wyrzuca błąd w tej linii:
Kod: | Case Else
.Add NewTextBox(myTop, myLeft) |
UF Dynamiczna tabela2.xlsm
|
Pobierz Plik ściągnięto 7 raz(y) 26.04 KB |
|
|
 | ID posta:
403233
|
|
|
 |
|
|
Artik


Wersja: Win Office 365
Pomógł: 3139 razy Posty: 10389
|
Wysłany: 06-04-2021, 12:10
|
|
|
Brakuje ostatniego argumentu.
Wydaje się, że wystarczy Kod: | .Add NewTextBox(myTop, myLeft, 0) |
Artik |
_________________ Persistence is a virtue in the world of programming. |
|
 | ID posta:
403235
|
|
|
 |
|
|
Tajan

Pomógł: 4767 razy Posty: 10469
|
Wysłany: 06-04-2021, 12:18
|
|
|
beret, pomieszałeś pliki. W pierwszym pliku definicja funkcji AddTextBox wygląda tak:
Kod: | Private Function NewTextBox(nTop As Long, nLeft As Long) As MSForms.TextBox | czyli funkcja ma dwa argumenty i do tej wersji się odniosłem. Natomiast w drugim pliku masz defnicję funkcji z trzema argumentami:
Kod: | Private Function NewTextBox(nTop As Long, nLeft As Long, nWid As Long) As MSForms.TextBox | i stąd komunikat błędu o brakującym argumencie. |
|
 | ID posta:
403236
|
|
|
 |
|
|
beret
ExcelGaduła 500+

Wersja: Win Office 2007
Pomógł: 13 razy Posty: 784
|
Wysłany: 06-04-2021, 12:28
|
|
|
Teraz jest super.
Wielkie dzięki. |
|
 | ID posta:
403239
|
|
|
 |
|
|
|
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
|