< návrat zpět
MS Excel
Téma: UserForm VBA - zjednodušení
Zaslal/a djflyash 17.5.2021 13:33
Dobrý den,
Mám takovýto (v příloze) UserForm a je v něm desítky TextBox, které potřebuji na základě podmínky (pokud v něm něco je vyplněno) propsat do seznamu v listu "Přidání".
Jednoduše - pokud v otevřeném formuláři někdo vyplní něco do pravého sloupce na kterékoliv kartě fomuláře, tak se musí vyplnit řádek (od A87 dále) dle toho, jak je napsáno v kodu:
Private Sub CommandButton1_Click()
posledni = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
'posledni = ActiveSheet.Range("A1").End(xlDown).Row + 1
If TextBox125.Value > "" Then
'Trh - stejny
Cells(posledni + 1, 1).Value = "CZ"
'Název - stejny
Cells(posledni + 1, 2).Value = UserForm1.Label10.Caption
'Konkurent
Cells(posledni + 1, 3).Value = UserForm1.TextBox117.Value
'Odkaz
Cells(posledni + 1, 4).Value = UserForm1.TextBox125.Value
'Kod - stejny
Cells(posledni + 1, 5).Value = UserForm1.Label9.Caption
'PM_S - stejny
Cells(posledni + 1, 6).Value = UserForm1.TextBox1.Value
End If
End Sub
Těch TextBoxů je tam ale tolik, že mi přijde nesmysl to ke každému řádku psát samostatně. Není prosím nějaká jednodušší možnost?
Děkuji. Jsem se zase dostal do slepé uličky...
Soubor je moc velký, tak jsem ho dal sem:
https://uloz.to/file/1aQXXOoNa80x/add-products-pm-s-xlsm#!ZJD3ZGR2AGuxBTR5AwuwZGZmAQxkMatjBTSlLISwI2WZIwLlZD==
Jiří497(17.5.2021 15:04)#050681 Pojmenoval bych si sloupce vzestupnou číselnou řadou např.:
TextBoxy v prvním sloupci TextBox1 - TextBox19
TextBoxy v druhém sloupci TextBox125 - TextBox144
nebo 1 - 19 a 101 - 119 - je to jedno
pak by to mohlo být třeba takto:
Dim prvniSloupec As Integer, druhySloupec As Integer
prvniSloupec = 1
For druhySloupec = 125 To 144
If UserForm1.Controls("TextBox" & druhySloupec).Value > "" Then
'Trh - stejny
Cells(posledni + 1, 1).Value = "CZ"
'Název - stejny
Cells(posledni + 1, 2).Value = UserForm1.Label10.Caption
'Konkurent
Cells(posledni + 1, 3).Value = UserForm1.Controls("TextBox" & prvniSloupec).Value 'původně TextBox117.Value
'Odkaz
Cells(posledni + 1, 4).Value = UserForm1.Controls("TextBox" & druhySloupec).Value 'původně TextBox125.Value
'Kod - stejny
Cells(posledni + 1, 5).Value = UserForm1.Label9.Caption
'PM_S - stejny
Cells(posledni + 1, 6).Value = UserForm1.TextBox1.Value
posledni = posledni + 1
prvniSloupec = prvniSoupec + 1
End If
Next
citovat
djflyash(17.5.2021 17:39)#050683 Tak to funguje lépe, než to šlo mě, ale:
Opakuje to stejný záznam z TextBox1 do prvního sloupce a dává to chybu "Could not find specified object" na toto:
If UserForm1.Controls("TextBox" & druhySloupec).Value > "" Then
citovat
Jiří497(17.5.2021 21:11)#050684 djflyash napsal/a:
Opakuje to stejný záznam z TextBox1 do prvního sloupce
Tomuto nerozumím. Nechápu, co tím přesně chcete říct.
djflyash napsal/a:
a dává to chybu "Could not find specified object"
Odkazujete se na TextBox, který tam nemáte. Pravděpodobně je v proměnné "druhySloupec" číslo, které v UserForm neexistuje. Mapř. TextBox1256 tam určitě nemáte.
Vložte novou přílohu.
citovat
djflyash(17.5.2021 22:58)#050685 Jiří497 napsal/a:
Tomuto nerozumím. Nechápu, co tím přesně chcete říct.
Vyplním v levém sloupci např. v prvním, třetím a pátém řádku hodnoty (test1, test2, test3), ty se propíší správně do buněk, ale hodnota, která je v prvním sloupci v každém řádku jiná se kopíruje do buněk pokaždé ta, která je v řádku 1, sloupec 1 (zde "Ardea")
Jiří497 napsal/a:
Odkazujete se na TextBox, který tam nemáte. Pravděpodobně je v proměnné "druhySloupec" číslo, které v UserForm neexistuje. Mapř. TextBox1256 tam určitě nemáte.
Tady tomu řádku kodu se přiznám vůbec nerozumím. Kouknete prosím, pokud najdete chvíli času, jak je to v souboru co posílám?
Jiří497 napsal/a:
Vložte novou přílohu.
https://uloz.to/file/xOCX2ai6OwTf/add-products-pm-s-xlsm#!ZJSxAGR2AzEzAwR3LGAvZmZ3ZJV4MzMHq09fZmL3q3ObrQMvZN==citovat
Jiří497(17.5.2021 23:47)#050686 Pravý sloupec, čtvrtý TextBox od spodu je TextBox140. Další (třetí odspodu) je TextBox142. Chybí TextBox141.
Takže přejmenovat poslední 3 TextBoxy v pravém sloupci.
Tím pádem se změní cyklus. Místo
For druhySloupec = 125 To 144 bude
For druhySloupec = 125 to 143
Prostě spodní index a horní index (kdybyste přidával textboxy, tak je na to třeba pamatovat
pak je třeba opravit tento příkaz (v původnm špatném kodu chybí písmenko L) Správně je:
prvniSloupec = prvniSloupec + 1
Takže správně je:
For druhySloupec = 125 To 143
.
.
.
prvniSloupec = prvniSloupec + 1
end if
Next
citovat
Jiří497(17.5.2021 23:49)#050687 Ještě bych upravil toto:
If UserForm1.Controls("TextBox" & druhySloupec).Value > "" Then na toto:
If UserForm1.Controls("TextBox" & druhySloupec).Value <> "" Thencitovat
Ten dátový model je obrovský. Úpravy už len bez neho. Prekopaný kód na
GoogleDrive.
citovat