Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno MS Excel - načítání dat z jiných listů

Programování mi moc nejde, ale docela to dokáže usnadnit práci.
Potřeboval bych prosím trošičku pomoct :))
Na jednom listu bych měl 4 tabulky pro tisk
Na dalších listech vytvářené databáze, jde jen o to, že by si člověk v některé z databází vybral řádek, klikl by na tlačítko v listu a některé hodnoty z řádku by se přesunuli do některé z tabulek na listu 1, nevim jestli jedno tlačítko které se bude ptát do které z tabulek, nebo 4 tlačítka? Vůbec nevim jak na to :((

Díky za jakoukoliv snahu mi pomoct...

[mod]Doplněn předmět a změna kategorie (LaKr)[/mod]

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Možná by bylo lepší napsat, čeho konkrétně chceš docílit.
Kráťa 11.10.2006 08:58
Kráťa
v databázi bude asi 30 listů, list může mít třeba 150 řádků, list tisku, budou tam 4 tabulky, protož…
noody 11.10.2006 09:47
noody
a říká ti něco MS Access? :-D
touchwood 12.10.2006 08:24
touchwood
Pročpak? Pode to tam líp???
noody 12.10.2006 08:27
noody
no jasně. nový
touchwood 12.10.2006 08:49
touchwood
Akorát že ases nikdo neovládá, kdybych přišel jak to v tom udělat? tak snad, ale ostatní by s tím ne… nový
noody 12.10.2006 11:20
noody
já ho třeba ovládám :-) poslední
touchwood 12.10.2006 14:30
touchwood
Ak máš v databáze nejaký identifikátor, tak by som použil taký prístup, ako píše senior. Ak si myslí…
los 11.10.2006 13:52
los
struktura údajů a jak by to mělo vypadat jsem umístil na tisklist.JPG Myslím že teprv teď se bude d…
noody 12.10.2006 07:41
noody
Aha, takže keď stlačí dvakrát jedno tlačidlo, tak hodnoty v určitých bunkách na tisk liste sa majú p… nový
los 12.10.2006 13:28
los

v databázi bude asi 30 listů, list může mít třeba 150 řádků,
list tisku, budou tam 4 tabulky, protože to budu tisknout na A4, komplikace jsou v tom, že z řádku databáze budu brát 5 údajů z 10, a těch 5 údajů je potřeba poskládat do některé z tabulek na tisklistu, To není tak těžký jak se zdá,
jde jen o to aby tlačítko pochopilo z kterého řádku brát hodnoty, výběr se potom zúží nejspíš sloupci, a potom musí být přesně definované buňky na listu tisku, protože si je nemůže kopírovat kamkoliv,
To přenesení hodnot do jiného listu jde naprogramovat přes makra, docela pohodlně, ale tam je právě chyba, že se zapíše která buňka se má kam skopírovat, ale mě bohatě stačí do toho makra nějak vložit to, aby bral poze hodnoty z ActiveCell a např buňku v sloupci A vybraného řádku přenesl na tisklist do A2, a pokračoval hodnotu z B sloupce přenesl na tisklist do A3, např...
A ten výběr mezi čtyřma možnostma na tisklistu, buť 4 tlačítka, nebo by se to tlačítko muselo nějak ptát...

Ak máš v databáze nejaký identifikátor, tak by som použil taký prístup, ako píše senior. Ak si myslíš, že vhodnejšie je tlačidlo s makrom, tak to spravíš nejako takto:

1. Vytvoríš si tlačidlo:
Cez menu View / Toolbars / Control Toolbox si zobrazíš lištu s prvkami, ktoré sa dajú pridávať. Vyberieš tlačidlo a umiestniš ho do stránky. "Ikona s pravítkom" je teraz stlačená, čo znamená, že si v Design móde.
Ak chceš, môžeš si to tlačidlo nejako inteligentne nazvať (inak to bude CommandButton1) cez pravé tlačidlo myši a Properties.

2. V Design mode dvakrát klikneš na tlačidlo, čím sa otvorí Visual Basic Editor a vytvorí obslužne makro pre udalosť stlačeni tlačidla, do ktorého stačí už len napísať, čo chceš.

3. No a teraz by som Ti napísal, čo potrebuješ, ale keďže neviem nič o štruktúre údajov v zošite, tak len všeobecne:
Najprv si vytvorím pomocné premenné pre niektoré oblasti:
- myTable bude tabuľka databázy, povedzme že je na druhom liste a jej ľavý horný roh je v bunke A3,
- myRegion bude oblasť na prvom liste (tisklist), kde sa budú nachádzať vybrané riadky z databázy,
- myCell si nastavím tak, aby to bol nový riadok na tiskliste, čiže riadok hneď pod myRegion.
Ďalej pokračujem len vtedy, ak používateľ označil (RangeSelection) niečo na liste s databázovou tabuľkou, takže porovnám index worksheetov.
Potom si zistím, čo používateľ na liste s databázovou tabuľkou označil, t.j. prienik mojej tabuľky (myTable) s vybranou oblasťou (RangeSelection).
No a ak niečo vybral, tak prejdem všetky riadky, ktoré sú vo vybranej oblasti a prekopírujem napríklad prvé tri stĺpce na prvý list (tisklist).

Takže to makro by vyzeralo nejako takto:

Set myTable = Sheets(2).Cells(3, 1).CurrentRegion
Set myRegion = Sheets(1).Cells(1, 1).CurrentRegion
Set myCell = myRegion.Offset(myRegion.Rows.Count).Resize(1, 4)

If myTable.Worksheet.Index = ActiveWindow.RangeSelection.Worksheet.Index Then
    Set mySelection = Intersect(myTable, ActiveWindow.RangeSelection)

    If Not mySelection Is Nothing Then
        For Each myRow In mySelection.Rows
            myCell.Cells(1, 1) = Sheets(2).Cells(myRow.Row, 1)
            myCell.Cells(1, 2) = Sheets(2).Cells(myRow.Row, 2)
            myCell.Cells(1, 3) = Sheets(2).Cells(myRow.Row, 3)
            Set myCell = myCell.Offset(1, 0)
        Next myRow
    End If
End If

struktura údajů a jak by to mělo vypadat jsem umístil na tisklist.JPG

Myslím že teprv teď se bude dat napsat kód, kterej pochopím

Jak to bude fungovat je asi jasný, vybrat řádek, kliknout na tlačítko1 a hodnoty z definovaných sloupců se přenesou na tisk list a poskládaj se tam podle dané definice,
pak bych vybral jinej řádek a tlačítko2 a provedlo by se to podobně,
naprosto mi bude stačit makro jediného tlačítka, u dalších se budou měnit pouze buňky tisklistu

Nejsu si jistej, ale to tlačítko by mělo fungovat způsobem:
vzít aktivní řádek, hodnotu ze sloupce A kopírovat na tisklist do A4,
dál ze sloupce B kopírovat na tisklist do C2 atd atd...

Mě se to zdá docela jednoduchý až na to že nevim jak na ten kód
Díky za pomoc :))

Aha, takže keď stlačí dvakrát jedno tlačidlo, tak hodnoty v určitých bunkách na tisk liste sa majú prepísať hodnotami z vybraného riadka v databáze. V tom prípade je makro úplne jednoduché - bude pozostávať z pár riadkov, ktoré môžu vyzerať nejako takto:

Sheets("tisklist").Range("A4") = Sheets("databaze").Cells(ActiveWindow.RangeSelection.Row, 1)
Sheets("tisklist").Range("C2") = Sheets("databaze").Cells(ActiveWindow.RangeSelection.Row, 2)

Zpět do poradny Odpovědět na původní otázku Nahoru