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