< návrat zpět
MS Excel
Téma: Ukladanie hodnoty cez userform + xls súbor
Zaslal/a ErikStudenic 25.6.2021 15:38
Zdravím,
mám dotaz mam userform kde si načítam data podla ID
moja otáka znie
ako si uložím do Hárok2 data ešte pred prepísaním ?
skúšal som ale nejde mi to ani trochu
Aktuálny kód čo sa mi podarilo naprogramovať aj s vašou pomocou a zatial mi to funguje
ĎAKUJEM za pomoc
Private Sub CommandButton1_Click()
Dim PoslednyRiadok As Integer
If id < koniec Then
CommandButton1.Visible = True
End If
Pridaj
End Sub
Private Sub CommandButton2_Click()
Vymaz
End Sub
Sub Vymaz()
For j = 1 To 6
UserForm1.Controls("TextBox" & j).Value = ""
Next j
End Sub
Private Sub CommandButton3_Click()
Unload Me
End Sub
Sub Pridaj()
End Sub
Sub Uprav()
'Jedná sa mi o tuto funkciu<- ak kliknem na tlacidlo uprav musí mi zapísať data riadka xy a stlpca 2-6 z Hárok1 do hárok 2 a automaticky priradiť ID v Hárok
do stĺpca 1 a upravit bunky 2-6 v Hárok1
End Sub
Private Sub CommandButton4_Click()
Dim koniec As Integer
koniec = Sheets("Hárok1").Cells(Rows.Count, "A").End(xlUp).Row
UserForm1.TextBox1.Value = koniec - 1
MsgBox "Posledné volné ID je " & koniec - 1
UserForm1.TextBox2.Value = ""
UserForm1.TextBox3.Value = ""
UserForm1.TextBox4.Value = ""
UserForm1.TextBox5.Value = ""
UserForm1.TextBox6.Value = ""
End Sub
Private Sub Label6_Click()
End Sub
Private Sub TextBox1_Change()
Dim id As Integer, i As Integer, j As Integer, k As Integer, l As Integer
Dim koniec As Integer
TextBox4.MultiLine = True
koniec = Sheets("Hárok1").Cells(Rows.Count, "A").End(xlUp).Row
If IsNumeric(UserForm1.TextBox1.Value) Then
i = 1
id = UserForm1.TextBox1.Value
Do While Sheets("Hárok1").Cells(i, 1).Value <> ""
If Sheets("Hárok1").Cells(i, 1).Value = id Then
For j = 2 To 6
UserForm1.Controls("TextBox" & j).Value = Cells(i, j).Value
Next j
End If
i = i + 1
Loop
End If
If koniec < id Then
CommandButton5.Visible = False
CommandButton1.Visible = True
UserForm1.TextBox2.Value = ""
UserForm1.TextBox3.Value = ""
UserForm1.TextBox4.Value = ""
UserForm1.TextBox5.Value = ""
UserForm1.TextBox6.Value = ""
Else
CommandButton1.Visible = False
CommandButton5.Visible = True
End If
End Sub
Příloha: 50903_vba.zip (35kB, staženo 14x)
Milan-158(1.7.2021 15:05)#050919 Přiznám se, že moc těm otázkám nerozumím. Naznačuješ, že ty jednotlivé kroky si implementuješ do svého souboru, ale ten nepřikládáš - asi tam máš nějaká data které nechceš zveřejňovat. Ale tím pádem jsme odkázani na slovní popis, který nese jen část informace plus kognitivní zkreslení.
Buď si ty svoje data nějak anonymizuj či jinak vhodně pozměň, (zachovej datové typy) ale bez přiloženého kompletního souboru je to odsouzeno nezdaru z uondání.
citovat
Už to behá presne tak jak sme si to predstavoval ale ešte jedna vec
jak urobím zálohu dat
- v Hárok 1 -> ID 1 (zmena dátumu od a do)
- v Hárok 2 -> najde volné ID a prekopíruje stlpec B,C,D,E,F - s pôvodným dátumom vid v priloženom excely
--
ĎAKUJEM ZA PEVNÉ NERVY Příloha: 50945_vba.zip (33kB, staženo 15x) citovat
Vidím, že listování záznamy z mé poslední přílohy jsi neimplementoval ale neva.
Uložení původních hodnot záznamu předtím, než uložíš změněné hodnoty (tedy jestli jsem to podle popisu správně pochopil) najdeš v příloze
Příloha: 50951_zaloha_dat-1.zip (37kB, staženo 12x) citovat
poslal som verziu, ktorú si mi poslal ty. ja si to skusam dat do toho mojho teraz som tam implementoval tú zálohu ale nedal som to na samostatné tlacidlo ale pridal som funkciu do tlacidla ulozit zmenu... funguje mi to je to super :)
ĎAKUJEM ZA POMOC
ešte malá otázka .... ak by som chcel hladať ID nie podla ActiveCell ale zadaním hodnoty do ID a podla hodnoty ID mi najde udaje viem ako by som to urobil ked je TextBox pomenovaný textbox ale teraz ked idem podla teba a premenoval som si vsetky TF a CB tak som stále neúspesný
vedel by si mi poradit? - teoreticky presne tak ako som to mal v tom prvotnom excely co som sem postoval (50903_vba.zip)
Ďakujem za pomoc
citovat
Milan-158(7.7.2021 20:14)#050953 Ve čtvrté verzi (Ucim_sa_VBA4.xlsm) bylo i listování záznamy, ale tys mi poslal něco, co je verzí 3, čili ještě bez toho. Pokud by sis v tom udělal pořádek, asi bys nic nezkazil...
A to hledání chceš spouštět tlačítkem z listu anebo to chceš startovat z prostředí formuláře? Anebo obojí?
citovat
Ak zadám ID do txtID tak mi nájde požadovaný záznam
riešil som to cez txtID_Change()
pri zmene textboxu txtID vyhladá záznam s požadovaným ID
citovat
Takže jsi na to přišel sám, paráda.
Jen upozornění na ošidnost událostních procedur pověšených na změnu - ty se spouští pokaždé když dojde k změně v daném prvku, tedy i když se ten prvek mění makrem. Takže i když načítáš nějaký záznam jiným makrem, přičemž to změní hodnotu v txtID, tak v tom okamžiku proběhne ta tvoje vyhledávající rutina, takže ve finále se to vlastně provede dvakrát. A docela dobře by se to mohlo i zacyklit. Zde je možné použít buď jiné události než change, anebo v momentě když si to nepřejeme, to potlačit pomocí Application.EnableEvents = False. Anebo to spouštět tlačítkem
citovat
Milan-158 napsal/a:
...anebo v momentě když si to nepřejeme, to potlačit pomocí Application.EnableEvents = False...
Musím Vás opraviť. Toto pri formulári VBA nefunguje. Na nevykonanie onChange používam globálnu premennú napr.
Dim bEnableEvents as Boolean
a následne v onChange hneď na začiatku testujem či je
If bEnableEvents Then
... vaše makro onchange ...
End If
a pritom bEnableEvents nastavím na
False vždy pred volaním procesu, ktorý spôsobí "nechcenú" zmenu. Po dokončení naspäť na
True.
citovat
Milan-158(8.7.2021 18:48)#050962 Bylo mi divné, že App.EnableEvents někdy funguje a někdy ne
, tak jsem to obvykle obešel jinak.
S tou globální proměnnou to zřejmě bude lepší, vyzkouším.
Každopádně dík za upřesnění.
citovat
Milan-158 - ĎAkujem za pomoc a pevné nervy viem že to bolo so mnou ťažké ale nakoniec sa to podarilo :) už to ide tak ako som chcel a k tej verzií 4 nejakým nedopatrením sa mi uložila do stiahnutých súborov a nevsimol som si to a stále som sa pohyboval v tej verzií 3 za čo sa ospravedlňujem že som mrhal tvojim časom
Ďakujem cenním si toho že sa nájdu ľudia, ktorý pomôžu a majú pevné nervy pri prípadoch ako som ja
citovat