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ů

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

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