< návrat zpět

MS Excel


Téma: Formulář na procházení záznamů z tabulky rss

Zaslal/a 24.8.2019 17:44

Dobrý den, prosím o pomoc,
mám tabulku se záznamy (několik desítek sloupců) a potřeboval bych k ní vytvořit formulář, do kterého by se vždy načetl záznam z jednoho řádku a pomocí kterého bych mohl jednoduše (třeba pomocí šipek) listovat mezi jednotlivými záznamy, upravovat je, mazat atd. Vestavěný datový formulář odmítá s tolika poli pracovat a navíc bych potřeboval vytvořit vlastní, abych ho mohl dále upravovat.
Jsem začátečník. Můžu někoho poprosit o jednoduchou ukázku, třeba jen s třemi poli Jméno, Příjmení, Adresa? Další pole a funkce bych se pak pokusil doplnit sám.

Díky moc, M.

Zaslat odpověď >

Strana:  « předchozí  1 2 3
#044479
avatar
Děkuji, zkusím se tím prokousat a najít proč mi ani nefunguje vámi zaslaná příloha, mi nahlásí při pokusení se zapsat data chybu 424

edit: tak jsme nasel kde byl zakopaný pes (.Value bylo navíc )a již vše funguje perfektně, moc děkujicitovat
#051040
avatar
Zdravím zase jsem se zastavil zda-li by někdo neporadil kde je chyba.

Mám formulář ve kterém si načtu požadovanou smlouvu a načtou se data vpravo. Pak jen zapíšu provádějícího technika a kliknu na tlačítko zda Odpojeno/Nepřístupné/Storno

Doplní se mi Datum provedení a dle specifikací 8 hodnot. Vše mě funguje dobře.

Můj problém je že když je dat více v listu Data tak jak hledání tak zapsání trvá dlouho.
Chtěl jsem toto ošetřit že by se pracovalo jen s daty které už nejsou z dříve odepsané. Což jsou data kde ve sloupci C není datum (datum kdy provedeno)

Přidal jsem si teda tlačítko Fast/vše kterým se mi data vyfiltruji nebo zase odfiltrují. Toto také funguje.

Problém je že když mám přepnuto na Fast (vyfiltruji) tak nemohu najít důvod proč při kliknutí na Odpojeno/Nepřístupno/Storno se mi nechtějí vyplnit dle specifikací poslední 4 hodnoty
Když zase přepnu na na vše tak se hodnoty zapíší správně

Děkuji za jakoukoli radu :)
Nejde mě vložit příloha tak snad takto
https://www.uschovna.cz/zasilka/NVWMK56LPKS54Y52-DM5/citovat
#051042
avatar
Pomohl bych ti rád, ale je to nesrozumitelné. A navíc se to chová jinak než popisuješ. Když dám zapsat, tak na listě Data je stále stejný počet řádků jak před akcí a stav přepínače Filtr na to nemá vliv. Anebo jsem nepochopil smysl toho formuláře
Zkus jasně popsat čeho chceš dosáhnout, ve smyslu:
1. ve formuáři udělám tuto změnu/akci ...
2. očekávám, že ...
3. Namísto toho se stane toto ...citovat
#051043
avatar
1) Spustím fakturační tabulku
2) V otevřeném formuláři zadám hledat např: 6196 , kliknu na najít. Načtou se mi data v pravé půlce.
3) Pak vyberu jednu ze 3 možností. Odpojeno - Nepřístupné -Storno. Podle toho se mi vyplní vpravo data a teda i v listu Data se dle toho změní údaje.
Např: kliknu-li na odpojeno, doplní se:
Datum provedení, Kód zásahu, specifikace, Služba, Jméno technika a Dokončeno se vyplní "ANO"
Ale když mám přepnuto na Fast = že se listu Data zafiltrují jen data které ještě nebyli takto odepsány tak se mi provede vše krom toho zapsání "ANO" v okně dokončeno zůstane prázdné.

Když bych klikl na Nepřístupné tak se mají vyplnit:
Dokončeno "ne"
Zrušeno "zrušeno_technikem
Důvod "nehotové bezpřítomnostní odpojení

To když je přepnuto na fast tak se toto nevyplní. Ale technik a datum provedení ano. Když ale fast vypnu tak stejné tlačítko tyto údaje vyplnícitovat
#051044
avatar
Změň u formuláře vlastnost ShowModal na False, tím umožníš, že bude možné kód krokovat. Jinak důvodem toho, že se nezapíšou hodnoty při aktivnám přepínači Filtr je skutečnost, že metoda Find jednoduše tu hledanou buňku nenajde a tím pádem řádek i = 0, čili žádný zápis se nemůže konat.
Čili potíž vidím v nešťastném prohledávání přes všechny buňky listu, které na filtrem skryté řádky nefunguje. Doporučuji použít vhodnější metodu hledání - třeba výběrem sloupce ve kterém se hledá. Anebo si načtu range do pole a prohledávání pole je řádově rychlejší než prohledávání hodnot na listě.citovat
#051045
avatar
Do VBA projectu si přidej modul (Insert-Module) a do něj vlož funkci VratCisloRadku (kód úplně dole), která funguje tak, že si nejdříve natáhne data z celého listu do pole a pak jej prohledá. Jakmile narazí na první nález, vrátí číslo řádku. To je to co potřebuješ a vrací to výsledek bleskem a případný filtr v listě Data na to nemá vliv.

Jinak tvoje oblast dat není souvislá, což není úplně dobře. Když se postavíš třeba na buňku A1 a uděláš dvojmat pravý Ctrl + hvězdička, tak se ti označí pouze oblast A1:M6201. Neboť sloupec N je úplně prázdný, ale pak zase data pokračují. Jakmile bys dal třeba omylem seřadit data, tak máš problém. Takže alespoň v těch prázdných sloupcích zapiš do záhlaví libovolný znak - uvidíš, že po dvojhmatu se ti označí celá oblast.

Takže kód pod tlačítkem "Najdi" si změň následovně:
Private Sub Najdi_Click()

i = VratCisloRadku(Me.TextBox17.Text)
If i = 0 Then
MsgBox "Zadaný údaj " & Me.TextBox17.Text & " nebyl nalezen"
Exit Sub
End If
Me.NajdiDalsi.Enabled = True
If i > 3 And Me.Předchozí.Enabled = False Then Me.Předchozí.Enabled = True
If i = 3 And Me.Předchozí.Enabled = True Then Me.Předchozí.Enabled = False
Call PrepisTextBox

End Sub


Public Function VratCisloRadku(strText As String) As Long

Dim ii As Long, j As Long
Dim rgOblast As Range
Dim arPole() As Variant
Dim ws As Worksheet

Set ws = Worksheets("Data")
Set rgOblast = ws.Range("A2").CurrentRegion
arPole = rgOblast

For ii = LBound(arPole, 1) To UBound(arPole, 1)
For j = LBound(arPole, 2) To UBound(arPole, 2)
If arPole(ii, j) = strText Then
VratCisloRadku = ii
Exit Function
End If
Next j
Next ii

End Function
citovat
#051048
avatar
Děkuji za radu.
Oblast v prvním řádku je v plné tabulce vyplněno (jen sem promazával citlivá data - smazáním celého sloupce)

Děkuji moc aplikoval jsem a opravdu hledání je několikanásobně rychlejší.

A neměl bys radu ještě jak i zrychlit zapsání ? to zůstalo při více dat stále pomalécitovat
#051053
avatar
No nevím, je to pakárna prodírat se nekomentovaným cizím kódem, kde prvky formuláře nebyly pojmenovány nějak smysluplně. Pomalost by mohla být zapříčiněna těmi spletitými výpočty nad množinou dat. Zkus je smazat, zdali se to významně nezrychlí.

Pokud ano, pak stojí za to se zamyslet, k čemu ty výpočty slouží a zdali by to nešlo spočítat pouze na vyžádání nebo jinak (třeba smyčkou přes pole - viděl jsi, že to švihá bleskurychle).citovat
#051055
avatar
Díky, vypnul jsem automatické výpočty pak na konci jen nechám přepočítat.citovat

Strana:  « předchozí  1 2 3

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