Líšia sa len (ne)zatvorením formulára po kliku na položku.
Ten vstupný formulár vloží nové dáta, keď kliknete na tlačítko "Zavrieť", nie na krížik.
Je to len slovíčkarenie, samozrejme, predpokladáme všetci to isté, že chcete nájsť nasledujúci riadok pod posledným záznamom. Ak sa tam nevyskytujú prázdne tak môže byť xlDown, ak áno tak xlUp. Inak clUp upravené na xlUp, to viete mobil a nočná hodina ...
Určite nehľadáte posledný prázdny, ale prvý prazdny
Robíte to cyklom, a prečo nie takto
PrazdnyBlg = Worksheets("Db").Cells(Rows.Count, 1).End(xlUp).Row + 1
A potom napr.
Worksheets("Db").Cells(PrazdnyBlg, 1).Value = neviem čo
PS: Z brucha z tabletu, tak snáď bez chyby.
Mne táto funkcia Excelu nevonia. Nedá sa nastaviť riadok, ktorý načíta pri otvorení. To môže viesť k fatálnym chybám, napr. pri odstraňovaní riadku. Každopádne asi myslíte toto. Opäť je to cez pravé myšítko, ale to sa dá zmeniť na tlačítko.
A posielam aj upravenú MAKROVÚ verziu. Pridal som zobrazenie počtu výsledkov, ale hlavne opravil nezmyselné priraďovanie poľa výsledkov do ListBoxu, ak je výsledkom iba jediný riadok - opravené. Formulár som zmenil na "plávajúci", teda je stále zobrazený (po pravom kliku), a len filtrujete a označujete kam sa má vložiť záznam. Dá sa to upraviť tak, že bude nový záznam vkladať vždy na prvý voľný riadok. Testované na 21300 úplne zaplnených dát, všetky riadky a stĺpce. Na mojom PC je to dostatočne rýchle.
A teraz hovoríte o čom ??? Aspoň povedzte o ktorej verzii hovoríte. Máte určite na mysli VZORCOVÚ verziu. To som tak nechal naschvál, lebo nepredpokladám, že sa niekto "nenarodí" :) Iba zmente formát stĺpca Tabuľky (nie celého stĺpca listu) na
General;;
Vek je počítaný vzorcom, a to že je 0, je iba následkom nezadaného dátumu narodenia, ktorý teda určite máte 0.1.1900. A ten nevadí ? Tiež zmente formát na
d.m.yyyy;;
Ešte som zmenil teda vzorec pre vek v liste Data.
Posielam upravenú VZORCOVÚ metódu.
To 123456(/a): mrk do Vášho druhého vlákna.
A EVALUATE si s tým tiež neporadí ?
Dim RNG As Range
With Worksheets("ListM")
Set RNG = .Range(Range("H2"), Range("H2").End(xlDown))
RNG.Value = Evaluate("=1*" & RNG.Address)
End With
Set RNG = Nothing
EDIT: Nie, neporadí, nevracia totiž pole, ani správnu interpretáciu.
Nechce sa mi čítať celé vlákno (ani toto, ani minulé), tak len okrajovo.
Vzorcami to riešiť (tak ako ste niekde spomenul/a) by mohlo byť možné napr. tak ako je navrhnuté v "Filter vzorcom.xlsx". Píšete do políčka a hneď počas písania sa filtruje Tabuľka. Tento vyfiltrovaný zoznam by sa dal potom použiť v Overení dát ako dostupný zoznam na vyplnenie formulára, či na čo to vôbec potrebujete. Nevýhoda je, že to nefunguje dostatočne rýchlo nad 1000 riadkov a berie do úvahy diakritiku. Veľkosť písma či čiastková zhoda nieje problém.
Výhodnejšie je makro. Makro to na vzorke požičanej od vovka.h (3500 riadkov) zvláda ľavou zadnou takmer okamžite aj s ignoráciou diakritiky, veľkosti písma, a samozrejme s čiastkovými zhodami v 4 stĺpcoch (ID, meno, OP, RČ). Pravý klik na riadok, kam vložiť údaje zo zdrojovej Tabuľky, vyfiltrovať písaním do TextBoxu, a klikom sa to vloží na želaný riadok. Súbor "Filter makrom.xlsm".
Použil som odstraňovanie diakritiky od eLCHa.
Zamýšľaný príspevok pošlite na účet fóra.
Heh, ale veď Vy musíte upresniť, čo potrebujete.
Chcete aby ste mali jedno políčko, do ktorého napíšete nejaký reťazec, a prehľadajú sa Vám všetky stĺpce, či sa tam nevyskytuje daný reťazec, a ak áno, tak sa všetky nájdené záznamy zobrazia ?
Chcete SVYHLEDAT? Tým chcete nájsť napr. jedno konkrétne číslo ID, a k nemu chcete vypísať ostatné údaje?
Ak chcete prehľadávať iný ako prvý stĺpec, nemôžete použiť SVYHLEDAT, ale INDEX+POZVYHLEDAT. Tieto možnosti sú ale primárne určené na nájdenie celej položky, a nie časti, ako popisujete.
Celkovo, otázok je veľa, mne sa nechce vypisovať Vám všetky možnosti, ale Vy napíšte čo potrebujete, ale aj popis ako to budete používať. Pretože napr. zamieňate slovo vyhľadať a filtrovať, tak je potrebné rapídne zlepšenie popisu.
Zlý popis, skoro žiadny príklad, nevhodný design. A k tomu mi nejde (alebo neviem) použiť v rozšírenom filtry filtrovanie čísla, ktoré obsahuje nejaké číslo. Ani keď je to "číslo" ako text. Každopádne v List 2 uchovávajte dáta (neviem, prečo musia byť medzi nimi prázdne stĺpce). Filtrované dáta sa Vám budú zobrazovať v List1, s tým, že v prvom stĺpci ID sa berie do úvahy iba kompletná zhoda, kdežto v druhým 2 stĺpcoch už akýkoľvek výskyt. Množstvo riadkov si to nájde samé.
Nedávno som robil iný druh filtru, kde prebehlo všetko v poliach a v stĺpcovom ListBoxe vo formulári, a fungovalo to ako chcete a rýchlo. Skúste toto, či bude vyhovovať, lebo na úpravu spomínaného riešenia do zverejniteľnej podoby nemám ani čas ani chuť, aj keď je to krpaté.
Ostatné makrá som Vám neskúmal, ale všimol som si že máte rovnaké makrá aj v module aj v List1.
Snáď Vám prípadne niekto poradí s filtrovaním časti čísla ID.
Slovom "označiť" myslíte ľavý klik myši ? Alebo slovom "označiť" myslíte vyfarbiť a pod. To je zásadný rozdiel v skladbe makra. To sa sa prehľadávaná oblasť mení, je najmenší problém, to sa dá vyriešiť jednoducho Definovaným názvom. Ale od významu slova "označiť" záleží či sa použije funkcia, alebo makro naviazané na udalosť listu (klik).
Netuším, či chápem správne. Tento kód do listu "Hárok1"
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 4 Then
Dim R As Long
On Error Resume Next
R = WorksheetFunction.Match(ActiveCell, Worksheets("Hárok2").Range("D1:D10"), 0)
If Err = 0 Then Cells(2, 6) = R Else Cells(2, 6) = CVErr(xlErrNA)
End If
End Sub
V liste "Hárok2" sú v D1:D10 hodnoty, ktoré prehľadáva. Táto adresa sa dá zmeniť v makre alebo zameniť za definovaný názov. podľa toho ako ju chcete meniť.
EDIT: Alebo označiť bunku, a nie len nájsť bunku ? Označiť bunku v neaktívnom liste snáď ani nejde. Neviem, potom asi takto.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 4 Then
Dim R As Long
On Error Resume Next
R = WorksheetFunction.Match(ActiveCell, Worksheets("Hárok2").Range("D1:D10"), 0)
Application.ScreenUpdating = False
If Err = 0 Then Application.Goto Worksheets("Hárok2").Range("D1:D10").Cells(R) Else Application.Goto Worksheets("Hárok2").Range("A1")
Application.Goto Target
Application.ScreenUpdating = True
End If
End Sub
Uložte si niekam vlastnosť TextBox1.ListIndex. To je Index (poradové číslo) vybranej položky. Ďalej si to už ľahko spracujete podľa potreby.
Tu máte príklad na Import/Export makro. Ale ako poriešiť ešte to upravenie diakritiky popravde neviem a ani sa mi nechce skúmať ...
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
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.