< návrat zpět

MS Excel


Téma: Vyhledání dat rss

Zaslal/a 18.11.2020 15:05

Dobrý den,

rád bych požádal o pomoc se zadáváním a vyhledáním dat ve VBA. Na listu Home se mi spustí formulář, který umí vyhledat data dle pole "Sp.Zn." Vložte např. do pole Sp.Zn. hodnotu z Databaee sloupce D.

1) Úplně nahoře formuláře v oranžovém poli bych potřeboval nastavit výběr Úkonu podle listu ČÍSELNÍKY. Tj. Pokud se vybere "Žádost o povolení zk", tak aby se v políčku Úkon vybíralo jen z buněk C2:C16, pokud se vybere Typ Změna, pak bude Úkon k výběru z C17:C31 a pokud se byvere Typ Kontrola, pak se bude vybírat Úkon z C32:C37. Číselník lze jakkoli rozšířit / upravit.

2) každý zápis se uloží jako nový řádek. To je požadavek klienta. Když se vyhledává dle Sp.Zn., tak se vždy berou hodnoty z posledního řádku, obsahující Sp.Zn. To je správně. Formulář ale obsahuje list Kontroly, kde je Kontrola 1 - 3. Např. hodnota pole z listu Kontrola 1 - Datum oznámení se uloží do Database sloupce AV. Když by nastala Kontrola 2, v poli Úkon se vybere Oznámení o kontrole 2 a ve formuláři v listu Kontrola 2 se zapíše hodnota z pole datum oznámení do sloupce database - AV. To je správně.
Potřeboval bych ale nastavit vyhledání dle Sp.Zn. tak, aby se v listu Kontrola 1 vypsaly hodnoty z AV z řádku o kontrole 1 a do listu Kontrola 2 vypsala hodnota z AV z příslušného řádku o kontrole 2. Datové rozhraní databáze nelze upravit. není možné přidávat další sloupce.

Děkuji za případnou úvahu a pomoc.

Zaslat odpověď >

Strana:  « předchozí  1 2 3 4 5   další »
#049287
avatar
Dobrý den,
prosím opět o pomoc.
databáze se mi zkomplikovala a potřebuji ve formuláří vyhledat data nejen podle 1 sloupce (Sp.Zn.) ale i podle čísla změny (sloupec CC v listu Database).
Problém je v tom, že každá zkouška (hledá se v sloupci D jako Sp.Zn.) může mít až 15 změn (v sloupci CC označeno jako Změna1, Změna2,...)
Každá změna má další kategorie (Žádost 0, Žádost 0 Výzva1, Žádost 0 Prodloužení 1,....) Hierarchie těchto kategorií je uvedena v listu Číselníky, v sloupcích A, B, C.
Potřeboval bych:
1) na formuláři v listu Změny jako název žlutého labelu uvést počet vyplněných změn (pro Sp.Zn. "k" by tam mělo být 15. Pro Sp.Zn "z" by se mělo zapsat číslo 1, jelikož tato spzn má jen 1 zápis označený jako Změna1.
2) nastavit vyhledávání dále tak, že pokud se ve formuláři zvolí číslo zkoušky, dohledají se data k této zkoušce.
Pokoušel jsem se nastavit obecné hledání Změny - Prodloužení 1-6, ale nejde mi to. Navíc nevím, jak to zakomponovat do toho cmbCZmeny... (ve formuláři jsem označil červeně).
Snažil jsem se to popsat co nejlépe, strukturu-hierarchii u změn napoví Číselník a přiložený obrázek.
Předem děkuji za pomoc.
Příloha: rar49287_kz11.rar (116kB, staženo 10x)
citovat
#049288
avatar
Dobrý den, nevím, zda jsem popsal srozumitelně, ale jde mi o to, že jakmile do červeného pole cmbCZmeny dám číslo změny (např. 1), tak se budou hledat data patřící do SpZn v sloupci D a do Kontroly1 v sloupci CC.
Zkusil jsem si to navrhnout, ale nejde mi to.

Private Sub cmbCZmeny_Change()
' reaguje na změnu, pokud je vložena hodnota > událost > provede se načtení tohoto skriptu
' proměnné
Dim id As Integer, i As Integer, z As Integer, pomoc As Boolean
Dim arrDruhZmenaProdlouzeni(5) As String

arrDruhZmenaProdlouzeni(0) = "Žádost 0 Prodloužení 1"
arrDruhZmenaProdlouzeni(1) = "Žádost 0 Prodloužení 2"
arrDruhZmenaProdlouzeni(2) = "Žádost 1 Prodloužení 3"
arrDruhZmenaProdlouzeni(3) = "Žádost 1 Prodloužení 4"
arrDruhZmenaProdlouzeni(4) = "Žádost 2 Prodloužení 5"
arrDruhZmenaProdlouzeni(5) = "Žádost 2 Prodloužení 6"

i = 1 'do i vloží 1
z = 1
id = UserForm1.txtSpZn.Value ' načte hodnotu
zmenaid = UserForm1.cmbCZmeny.Value
pomoc = False ' předpoklad že není nalezeno > dojde k vymazání

If Cells(i, 4).Value <> "" Then
Do While Cells(z, 81).Value <> ""
If Cells(z, 81).Value = zmenaid Then
pomoc = True ' nalezeno tak se nic mazat nebude
End If
z = z + 1
Loop
End If

'************ ZMĚNY Prodloužení
For m = 1 To 6
Set kontrola = .Range("D2:D" & Cells(Rows.Count, "A").End(xlUp).Row).Find(id, searchDirection:=xlPrevious)
Do Until kontrola Is Nothing
If .Range("B" & kontrola.Row).Value = arrDruhZmenaProdlouzeni(m) Then
UserForm1.Controls("txtZmenaLhutaProdlouzeni" & (m)).Value = .Range("AE" & kontrola.Row).Value
UserForm1.Controls("txtZmenaOdeslaniProdlouzeni" & (m)).Value = .Range("AF" & kontrola.Row).Value
UserForm1.Controls("txtZmenaUsneseniProdlouzeni" & (m)).Value = .Range("AG" & kontrola.Row).Value
UserForm1.Controls("txtZmenaDoDataProdlouzeni" & (m)).Value = .Range("AH" & kontrola.Row).Value
UserForm1.Controls("txtZmenaRozhodnutiProdlouz" & (m)).Value = .Range("AI" & kontrola.Row).Value
Exit Do
End If
Set kontrola = .Range("D1:D" & kontrola.Row - 1).Find(id, searchDirection:=xlPrevious)
Loop
Next m
'************* konec ZMĚNY prodloužení

End Subcitovat
#049289
avatar
Mrknu se na to, ale "vydrž Prťka, vydrž" https://www.youtube.com/watch?v=0X_xmuyvTWU&ab_channel=fleximan228citovat
#049290
avatar
rozhodně nemůže být cyklus for m=1 to 6 když m následně používáte jako index pole. Pole je standardně indexované od 0.
Takže for m=0 to 5 nebo If .Range("B" & kontrola.Row).Value = arrDruhZmenaProdlouzeni(m-1)citovat
#049291
avatar
Děkuji za nápovědu. Také jsem našel chybu v číselnících.
Nyní mi vyhledávání Změn - Prodloužení funguje, ale potřeboval bych ještě pomoci s tím, že by se do žlutého labelu zapsalo, kolik bylo změn u dané spzn. U spzn "k" je celkem 15 změn (data jsem doplnil jen pro změnu 1m změnu 2 a změnu 15). Takže teď mi to najde data pro změny 15. Proto bych potřeboval, že v žlutém labelu bude v tomto případě 15 a v červeném combo boxu bude na výběr Změna 1-15. Pokud se vybere změna 1, tak se ukážou data ke změně 1, pokud se vybere změna 2, tak se ukážou data ke změně 2 atd...
Příloha: rar49291_kz12.rar (77kB, staženo 8x)
citovat
#049292
avatar
Takže takový nástřel. Vyberu Sp.Zn "k" a pak si mohu vybírat změnu 1 - 15 v červeném políčku.
Nejsou ošetřeny chyby, takže pro Sp.zn "z" to nefunguje.

Je potřeba doplnit načítání jednotlivých údajů v proceduře cmdCZmeny_change. Je to tam naznačené, musí se dopsat všechny další možnosti podle stejného vzoru.

Do jednotlivých prvků se načítají data z pole arrZmeny
s tím, že:
v arrZmeny(1,i) jsou data ze sloupce B
arrZmeny(2,i) je sloupec AE
arrZmeny(3,1) je AF
4 je AG
5 je AH
6 je AI
7 je BU
8 je CC
v arrZmeny(9,i) je číslo změny vytažené ze sloupce CC

takže to zkuste doplnit, pak se pohnem dál....
Příloha: zip49292_kz12.zip (82kB, staženo 7x)
citovat
#049293
avatar
Děkuji za odpověď.
doplnil jsem chybějící část kódu, ale nenachází to Žádost 0. V kodu jsem popsal. Pak sjem se snažil načíst ještě další sloupce, ale to se mi nepodařilo. Můžete, prosím, prověřit, kde je chyba?
Příloha: rar49293_kz13-po-oprave.rar (88kB, staženo 8x)
citovat
#049294
avatar
V tabulce v B16 jsou v textu "Změna - Žádost 0" dvě mezery ořed pomlčkou a v Case Select je jen jedna mezera. Text je jiný, proto samozřejmě nemůže fungovat.

Druhý problém: ReDim Preserve arrZmena(1 To 9, 1 To j) když do pole načítáte další prvky, musí být na to nastavené. Je potřeba změnit číslo 9 na 12: ReDim Preserve arrZmena(1 To 12, 1 To j)Normálně by to házelo chybu, ale zrovna v tomto místě je vypnuto hlášení chyb (kvůli kolekci), tak se chyba objeví až při pokusu načíst tyto (ne)zapsané hodnotycitovat
#049304
avatar
Dobrý den, děkuji za odpověď. mezeru jsem opravil, ale stále nefunguje vyhledání dat pro Zkoušku - Žádost 0, říkám si, jestli to není tou nulou.
Podobně už jsem tak zamotaný, že nevím, jak nastavit dohledání dat pro Zkoušku - Potvrzení (poslední řádek u dané zkoušky). Zároveň bych se chtěl zeptat, zda je to jen u mě nebo i u Vás - když sjedu ve formuláři úplně dolů, tak tlačítka a Potvrzení mám rozmazané a nečitelné. Nevím, jestli je to pamětí / grafickou kartou, jestli to není moc náročné na počítač....
Příloha: rar49304_kz14.rar (88kB, staženo 7x)
citovat
#049306
avatar

MilaF napsal/a:

........ ale stále nefunguje vyhledání dat pro Zkoušku - Žádost 0

????????
Co to je, vždyť to nikde není. Nebo jsem slepý?
Na kterém řádku to je?

Nic rozmazaného nemám.citovat

Strana:  « předchozí  1 2 3 4 5   další »

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