Excel, macro kopiëren voor gebruik in ander werkblad

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Galois
  • Registratie: Oktober 2002
  • Laatst online: 07:52

Galois

1811 - 1832

Topicstarter
Ik ben wat aan het klooien met Excel. Ik heb een macro gemaakt in 'Blad1' en deze wil ik ook gebruiken in 'Blad2'.

Nu staan in deze macro dingen als:

code:
1
2
    With ActiveWorkbook.Worksheets("Blad1").Sort
        .SetRange Range("A1:H31")

(overigens irrelevant voor mijn vraag wat deze macro exact doet, maar even een stukje uit geknipt als voorbeeld)

Ik kopieer het hele Blad1 naar Blad2. Verder de data en wil de macro weer draaien. Dat gaat dus niet, omdat in die macro allemaal Blad1-dingen staan.

Hoe ik het opgelost heb, maar dat is een erg onhandige manier en het moet vast slimmer kunnen (vandaar mijn vraag hier).

- ik heb een nieuwe module aangemaakt, hierin de code geplakt, overal waar Blad1 voorkwam, Blad2 van gemaakt :)

Maar ik zocht eigenlijk naar een code als 'het actieve blad' oid. Zodat ik de macro in elk tabblad con gebruiken. Is dit mogelijk?

---------------

En omdat ik toch bezig ben... nog een vraag.

De gebruiker typt in cel A1 een getal (bv. 5) in.

Ik wil dan mijn macro vervolgens cel B5 laten gebruiken (en als getal 8 wordt ingetypt, cel b8, enz). Ik wil dus eigenlijk iets als =B(A1) (waar ik dus B5 mee bedoel) oid. Dit moet kunnen, alleen weet ik dus niet de geschikte code voor. Iemand?

1 - Mathematics is the language of nature. 2 - Everything around us can be represented and understood through numbers. 3 - If you graph the numbers of any system, patterns emerge.

Alle reacties


Acties:
  • 0 Henk 'm!

  • g0tanks
  • Registratie: Oktober 2008
  • Laatst online: 01:36

g0tanks

Moderator CSA
Heb je zelf al wel gezocht?

Met name je eerste vraag is goed te vinden met zoektermen in de trant van 'excel vba current sheet'. Je tweede vraag is wat lastiger dus ik geef je een hint, gebruik INDIRECT function - Office Support

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


Acties:
  • 0 Henk 'm!

  • Galois
  • Registratie: Oktober 2002
  • Laatst online: 07:52

Galois

1811 - 1832

Topicstarter
g0tanks schreef op zondag 10 januari 2021 @ 21:09:
Heb je zelf al wel gezocht?

Met name je eerste vraag is goed te vinden met zoektermen in de trant van 'excel vba current sheet'. Je tweede vraag is wat lastiger dus ik geef je een hint, gebruik INDIRECT function - Office Support
Dank, dit heb ik inderdaad al geprobeerd...

Zo heb ik geprobeerd om Blad1 te vervangen voor Activesheet (of Activesheet.name).

zoals bv. hier gedaan wordt: https://www.ozgrid.com/fo...current-worksheet-in-vba/

Helaas werkt dat niet...

1 - Mathematics is the language of nature. 2 - Everything around us can be represented and understood through numbers. 3 - If you graph the numbers of any system, patterns emerge.


Acties:
  • +1 Henk 'm!

  • g0tanks
  • Registratie: Oktober 2008
  • Laatst online: 01:36

g0tanks

Moderator CSA
Galois schreef op zondag 10 januari 2021 @ 21:32:
[...]


Dank, dit heb ik inderdaad al geprobeerd...

Zo heb ik geprobeerd om Blad1 te vervangen voor Activesheet (of Activesheet.name).

zoals bv. hier gedaan wordt: https://www.ozgrid.com/fo...current-worksheet-in-vba/

Helaas werkt dat niet...
Als je letterlijk Blad1 vervangt door ActiveSheet dan gaat het inderdaad niet werken. Kan je laten zien welke code je hebt geprobeerd?

Ultrawide gaming setup: AMD Ryzen 7 2700X | NVIDIA GeForce RTX 2080 | Dell Alienware AW3418DW


Acties:
  • 0 Henk 'm!

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 11:26

heuveltje

KoelkastFilosoof

Beide manieren kunnen. Je kunt gewoon blad1 vervangen door blad2
Of je gaat alles wat verwijst naar "blad1" vervangen naar activeworksheet.

In dat laatste geval veranderd wel de syntax. With ActiveWorkbook.Worksheets("Blad1").Sort zou dan Activeworkbook.activesheet.sort worden gok ik


eventueel vervang je overal "blad1" door Blad en doe je ergens in het begin Blad="blad2"
Dan hoef je de volgende keer alleen die regel aan te passen.

[ Voor 56% gewijzigd door heuveltje op 10-01-2021 21:38 ]

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d


Acties:
  • 0 Henk 'm!

  • Galois
  • Registratie: Oktober 2002
  • Laatst online: 07:52

Galois

1811 - 1832

Topicstarter
g0tanks schreef op zondag 10 januari 2021 @ 21:34:
[...]


Als je letterlijk Blad1 vervangt door ActiveSheet dan gaat het inderdaad niet werken. Kan je laten zien welke code je hebt geprobeerd?
Dat gaat inderdaad niet goed... Grrr...

Ik heb 'm:

Ik heb ActiveWorkbook.ActiveSheet
heuveltje schreef op zondag 10 januari 2021 @ 21:35:
Beide manieren kunnen. Je kunt gewoon blad1 vervangen door blad2
Of je gaat alles wat verwijst naar "blad1" vervangen naar activeworksheet.

In dat laatste geval veranderd wel de syntax. With ActiveWorkbook.Worksheets("Blad1").Sort zou dan Activeworkbook.activesheet.sort worden gok ik
Dat is dus zoals ik het opgelost heb, door idd alles te hernoemen. Maar dat vond ik een 'domme' manier, vandaar mijn vraag hier.

Maar ik ben eruit, dankzij de hulp van @g0tanks (al zou je dat misschien niet verwachten, met de beetje bijzondere manier zoals hij probeert te helpen ;) maar dank hoor!).

Als ik bovenstaande code vervang voor

code:
1
2
    With ActiveWorkbook.ActiveSheet.Sort
        .SetRange Range("A1:H29")


dan werkt het! Ik zat helaas teveel in die 'haakjes', dat ik daar iets in wilde wijzigen...

En mijn tweede vraag... is daar iets 'makkelijks' voor? Ik kom er niet uit, kan ook niet iets simpels voor vinden...

1 - Mathematics is the language of nature. 2 - Everything around us can be represented and understood through numbers. 3 - If you graph the numbers of any system, patterns emerge.


Acties:
  • +1 Henk 'm!

  • heuveltje
  • Registratie: Februari 2000
  • Laatst online: 11:26

heuveltje

KoelkastFilosoof

verdiep je eens in wat een variable is
Je komt kan op zo iets uit

X = cells(b5).value //geef X de waarde die in b5 staat
range("b"+X).activate //ga naar cell bX

pin me niet helemaal vast op de syntax. geen vba bij de hand

[ Voor 15% gewijzigd door heuveltje op 10-01-2021 21:47 ]

Heuveltjes CPU geschiedenis door de jaren heen : AMD 486dx4 100, Cyrix PR166+, Intel P233MMX, Intel Celeron 366Mhz, AMD K6-450, AMD duron 600, AMD Thunderbird 1200mhz, AMD Athlon 64 x2 5600, AMD Phenom X3 720, Intel i5 4460, AMD Ryzen 5 3600 5800x3d

Pagina: 1