Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Tabulka vyhledávání

No jo, tohle dolepování kódu prostě zbožňuju. ]:)
Prvně, než začneš něco programovat, si musíš udělat analýzu problému, říct si všechny maximální požadavky na systém (slevit z požadavků se dá vždy téměř bezbolestně, něco přidávat - třeba i prkotinu - je vždy problematické, někdy i nemožné), jak budou muset být organizovaný data, atd. atd. a pak teprve začít psát program. Uvědom si, že jsem udělal jen takový hrubý nástin, každý zásah to daleko víc zesložiťuje, než kdybych to začal psát s uvážením všech různých možností.

Musíš si uvědomit, že rodné číslo je stejně jako ID číslo. Takže bys musel někde makru sdělit, že to zadané číslo má brát jako rodné číslo, nikoli ID. Ruční způsob zadání by asi nebyl příliš vhodný, protože bys přišel o výhodu automatického výběru hledání dle ID nebo dle jména, takže se to musí ošetřit v makru - třeba tak, že se otestuje velikost čísla. Lze totiž předpokládat, že ID bude vždy menší, než rodné číslo. Ovšem - pokud bys chtěl vyhledávat třeba i dle začátků rodného čísla (tak jako u jména), ten test na velikost by pravděpodobně selhal a musel by nastoupit ruční způsob zadání dle čeho chceš vyhledávat.

Takže pro jednoduchost předpokládám, že budeš chtít vyhledávat podle celého rodného čísla. Tedy do makra se dostane informace, že bylo zadáno číslo. Vlastní větvení ID/rodné číslo zařídíš ve větvi "If VyhlKde = 0", která se rozroste takto:

      If VyhlKde = 0 Then           ' Hledám v ID/RČ
        If Val(VyhlCo) > 10000 Then ' Hledám v RČ
          If VyhlCo = WsData.Cells(AktRadek, 5).Value Then
            WsData.Range(Cells(AktRadek, 2), Cells(AktRadek, 16)).Select   ' Vyberu řádek
            Selection.Copy          ' Vybraný řádek zkopíruji na vyhledávací list
            WsVyhl.Activate
            WsVyhl.Cells(AktRadekVyhl, 2).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
              SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
            Exit Do                 ' Končím cyklus
          End If
        Else                        ' Hledám v ID
          If VyhlCo = WsData.Cells(AktRadek, 2).Value Then
            WsData.Range(Cells(AktRadek, 2), Cells(AktRadek, 16)).Select   ' Vyberu řádek
            Selection.Copy          ' Vybraný řádek zkopíruji na vyhledávací list
            WsVyhl.Activate
            WsVyhl.Cells(AktRadekVyhl, 2).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
              SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
            Exit Do                 ' Končím cyklus
          End If
        End If
      End If
Funguje to, i když by to určitě šlo udělat elegantněji, zvláště kdybych s tím počítal hned od začátku tvorby makra (viz výše).

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny