Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[EXCEL] Dynamische tabel selecteren en plakken in nieuw werk

Pagina: 1
Acties:

  • MrDirk
  • Registratie: Januari 2002
  • Laatst online: 04-07-2023
Ik noem het een dynamische tabel, maar het is niks anders dan een tabel met uren van werknemers.
Per dag komt er een regel bij in deze tabel. Omdat het onbekend is hoeveel dagen een werknemer werkt, is het ook onbekend hoe groot de tabel is/wordt.

Toch wil ik een knop maken met daarachter een macro. Deze macro moet de gehele tabel selecteren, kopieren en plakken in en ander werkblad.

Ik heb de tabel al een gedefinieerde naam gegeven, maar hoe moet de code er nu uit zien?
Wat ik nu heb werkt niet.

code:
1
2
3
4
5
6
7
8
9
10
11
Sub Copytowerkblad()
'
' nieuwe macro
'
   Range("Header").Select
   Range("Januari").Select
    ActiveSheet.Pictures.Paste.Select
    ActiveSheet.Shapes.Range(Array("Picture 1")).Select
    Range("F21").Select

End Sub

"We do not first see, then define, we define first and then see" (Lippmann)


  • MrDirk
  • Registratie: Januari 2002
  • Laatst online: 04-07-2023
Header en Januari zijn twee gedefinieerde (tabel)namen.

"We do not first see, then define, we define first and then see" (Lippmann)


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Ten eerste: je wilt (IMHO) binnen een macro nooit .Select, .Copy, etc gebruiken, behalve als het heel bewust moet om juist wat in beeld te zien gebeuren resp. om het clipboard leeg te maken.

Doe direct werkblad.Cells(x,y) = bla

Schrijf je code eens in het Nederlands, wat staat er dan? Ik zie alleen maar 5x een select, daar gebeurt dus niets behalve dat 'de cursor verplaatst'.

Als het semi-statisch is, dan is er helemaal geen code nodig.
Stel Blad1: header is a1-f1, en januari is a2-f32
Dan is het (tenminste in XL2010) voldoende om op blad2 op regel1 in elke cel =header en op regel 2 t/m 32 =januari te zetten.

Alternatief is de INDEX-functie gebruiken, ook zonder VBA-code: =INDEX(header;1;2) geeft bijv. de tweede kolom van de header.

Als dat niet voldoet: in de code dus bijvoorbeeld Worksheets(2).Cells(i, j) = Range("Januari").Cells(m, n)

Met bijv.
For each c in range("januari").cells
'iets met c.Row en c.Column
Next c

kan je dan een loopje maken.

Verder is het zelf natuurlijk af te maken, maar dat zal je zelf moeten doen. Ga geen 'productie'-code maken als je VBA nog niet voldoende kent :)
offtopic:
Binnen 24 uur ajb niet het topic 'omhoog schoppen'. Pas dan je eigen topicstart aan als je iets wilt toevoegen terwijl niemand heeft gereageerd.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • 3xNix
  • Registratie: Juli 2001
  • Laatst online: 13-07 19:28

3xNix

golfr in hart en nieren

Ik heb 1 regel in gedachte... meer niet...

ActiveSheet.Copy Before:=Sheets(1)