< návrat zpět

MS Excel


Téma: UserForm VBA - zjednodušení rss

Zaslal/a 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... 6 1

Soubor je moc velký, tak jsem ho dal sem:

https://uloz.to/file/1aQXXOoNa80x/add-products-pm-s-xlsm#!ZJD3ZGR2AGuxBTR5AwuwZGZmAQxkMatjBTSlLISwI2WZIwLlZD==

Zaslat odpověď >

#050681
avatar
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
#050683
avatar
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
#050684
avatar

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
#050685
avatar

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
#050686
avatar
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
#050687
avatar
Ještě bych upravil toto: If UserForm1.Controls("TextBox" & druhySloupec).Value > "" Then na toto: If UserForm1.Controls("TextBox" & druhySloupec).Value <> "" Thencitovat
#050688
elninoslov
Ten dátový model je obrovský. Úpravy už len bez neho. Prekopaný kód na GoogleDrive.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje