Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: switchen tussen macro's met overname variabelen  (gelezen 4686 keer)

0 leden en 1 gast bekijken dit topic.

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
switchen tussen macro's met overname variabelen
« Gepost op: 09 november 2021, 09:37:49 »
Goeiemorgen allemaal,

Hoe ik een gewone macro moet aanroepen in een andere macro heb ik reeds ervaring mee maar in het huidige geval moeten er in beide richtingen variabelen ‘meegenomen’ worden.

Dus met de waarde uit een variabele op de werkbladmacro moet een bepaalde procedure uitgevoerd worden in de modulemacro en vervolgens moet dan met het resultaat (uit die modulemacro) op de werkbladmacro verdere code uitgevoerd worden.

Ik heb een héél simpel voorbeeldbestandje gemaakt met in elke macro maar enkele lijntjes random code (om een idee te geven) maar in het echte bestand zijn er tientallen lijnen code alsook meerdere modulemacro’s die aangeroepen moeten worden doorheen de werkbladmacro.

Alvast mijn oprechte dank op voorhand.

P.S. : de werkbladmacro zal uiteindelijk uitgevoerd (moeten) worden telkens de waarde in cel A1 wijzigt.

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline SoftAid

  • Administrator
  • Ambassadeur
  • *****
  • Berichten: 20.177
  • Geslacht: Man
  • Nobody is perfect, not even me...
Re: switchen tussen macro's met overname variabelen
« Reactie #1 Gepost op: 09 november 2021, 10:08:58 »
Hallo BlackDevil,

als het mogelijk is om een variabele in verschillende macro's te gebruiken, dan laat ik het aan de experts over.
Zelf zou ik gewoon enkele rijen of kolommen in een werkblad gebruiken en de data die je nodig hebt hierin opslaan, om ze daarna met de andere macro terug in te lezen.

:) SoftAid :)             
Maximum grootte bijlagen vergroot naar 4 MB
Dubbelposten, het posten op verschillende forums van dezelfde vraag, dient op
voorhand gemeld te worden, met een link naar het topic op de andere site.
Overtreding van deze regel kan bestraft worden met verbanning !

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: switchen tussen macro's met overname variabelen
« Reactie #2 Gepost op: 09 november 2021, 10:16:44 »
Dag BlackDevil,

Voor een eenvoudige situatie als in je voorbeeld zou ik er een functie voor gebruiken.
Tot de essentie herleid kan dat er zo uitzien (de functie zet je dan ook in een module!):
Sub werkbladmacro()
datum = begin(Cells(1, 1))
End Sub

Function begin(jaar)
begin = DateSerial(jaar, 5, 14) + 13
End Function

Op gelijkaardige wijze (parameters meegeven) kan je ook enkel met Sub's werken.

Mvg,
Molly
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: switchen tussen macro's met overname variabelen
« Reactie #3 Gepost op: 09 november 2021, 10:22:33 »
@SoftAid,

Hartelijk dank voor je reactie  ;).


@MollyVH,

Hartelijk dank voor je aangereikte oplossing. _/-\o_
Ik ga het meteen uittesten  ;).
Moest ik toch problemen ondervinden dan laat ik het hier wel weten.

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: switchen tussen macro's met overname variabelen
« Reactie #4 Gepost op: 09 november 2021, 10:46:11 »
Hallo,

Wat voor mij 'gelijkaardig' is (uit vorig bericht), is dat daarom niet voor anderen. Wegens straks voor langere tijd afwezig toch maar even voorbeeldje met Sub, volledig geënt op jouw bijlage:
Sub werkbladmacro()
jaar = Cells(1, 1)
'voer modulemacro uit
modulemacro jaar, datum2
'verdere code hier
End Sub

Sub modulemacro(jaar, datum2)
datum = DateSerial(jaar, 5, 14)
datum2 = datum + 13
End Sub
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 422
Re: switchen tussen macro's met overname variabelen
« Reactie #5 Gepost op: 09 november 2021, 10:47:25 »
Je kunt global variabelen gebruiken

Als je dit gebruikt als module macro:

Global jaar, datum2

Sub modulemacro()
datum = DateSerial(jaar, 5, 14)
datum2 = datum + 13
End Sub

En dit achter je werkblad

Sub werkbladmacro()
jaar = Cells(1, 1)
modulemacro
begin = datum2
End Sub

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: switchen tussen macro's met overname variabelen
« Reactie #6 Gepost op: 09 november 2021, 10:49:53 »
ok, hier ben ik dus al  :D

Voor de situatie in het voorbeeldbestand werkt dit perfect (had ook niets anders verwacht) maar zoals ik al zei
zijn in het werkelijke bestand de macro's veel uitgebreider dus ik zit al onmiddellijk in de problemen  ;D...

Elke procedure in elke aparte modulemacro dient uitgevoerd te worden op basis van diezelfde variabele "jaar" uit de
werkbladmacro (dus de waarde uit "Cells(1, 1)" ), die overigens in de werkbladmacro zelf ook nog gebruikt moet worden.
Maar binnen elke procedure zijn er meerdere resultaten die verkregen moeten worden en elk resultaat dient afzonderlijk
dan verder gebruikt te kunnen worden in de werkbladmacro.

(blijkbaar had ik mijn simpel voorbeeldbestandje én mijn uitleg deze keer té simpel gemaakt  :D waarvoor mijn excuses)

groetjes,
BlackDevil

P.S.: zie net bij het verzenden dat er nog reacties werden geplaatst terwijl ik mijn bericht aan het schrijven was...
hierop zal ik straks verder ingaan aangezien ik nu met de dochter naar de dokter moet vertrekken
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 422
Re: switchen tussen macro's met overname variabelen
« Reactie #7 Gepost op: 09 november 2021, 11:11:42 »
Alle variabelen die je in meerdere macro's wilt oproepen moet je global declareren.

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: switchen tussen macro's met overname variabelen
« Reactie #8 Gepost op: 09 november 2021, 13:38:21 »
Hallokes allemaal,

Om toch iets meer te kunnen verduidelijken wat ik precies wil bereiken ga ik uit mijn origineel bestand toch één (van vele)
modulemacro hier vermelden. Om het effect van meerdere modulemacro's te verkrijgen heb ik deze wel eventjes opgesplitst in twee aparte modulemacro's.

Bij deze de aangepaste werkbladmacro :
Sub werkbladmacro()

jaar = Cells(1, 1)
nieuwjaar = DateSerial(jaar, 1, 1)
oudjaar = DateSerial(jaar, 12, 31)

''voer modulemacro uit

aantal_jan = DateValue(Format(dat1 + 13, "dd-mm-yyyy")) - nieuwjaar + 1
aantal_dec = oudjaar - DateValue(Format(dat2, "dd-mm-yyyy")) + 1

totaal = aantal_jan + aantal_dec

End Sub

En dit is dan de opgesplitste modulemacro (normaal 1 macro) :
Sub kerstvakjan()

''kerstvakantie januari huidig jaar berekenen
Select Case Weekday(DateSerial(jaar - 1, 12, 25), vbMonday)
Case Is < 6
   dat1 = DateSerial(jaar - 1, 12, 25) - Weekday(DateSerial(jaar - 1, 12, 25), vbMonday) + 1
Case Else
   dat1 = DateSerial(jaar - 1, 12, 25) + 7 - Weekday(DateSerial(jaar - 1, 12, 25), vbTuesday)
End Select

End Sub

Sub kerstvakdec()

''kerstvakantie december huidig jaar berekenen
Select Case Weekday(DateSerial(jaar, 12, 25), vbMonday)
Case Is < 6
   dat2 = DateSerial(jaar, 12, 25) - Weekday(DateSerial(jaar, 12, 25), vbMonday) + 1
Case Else
   dat2 = DateSerial(jaar, 12, 25) + 7 - Weekday(DateSerial(jaar, 12, 25), vbTuesday)
End Select

End Sub


Ondertussen ga ik dat "global"-aspect eens verder bestuderen. :thumbsup:

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: switchen tussen macro's met overname variabelen
« Reactie #9 Gepost op: 09 november 2021, 14:24:08 »
@Veerj,

Voor de macro's uit mijn bericht #8 is het perfect gelukt met de Global  :thumbsup:
Ontzettend bedankt voor alweer een top-tip  _/-\o_ _/-\o_

Nu uitzoeken welke variabelen ik allemaal aan Global nog moet toevoegen om in het origineel bestand alle macro's in hun geheel
correct te laten samenwerken.  ;)

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 422
Re: switchen tussen macro's met overname variabelen
« Reactie #10 Gepost op: 09 november 2021, 15:58:23 »
Mooizo! Alle variabelen die je in een andere macro oproept dus :)

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: switchen tussen macro's met overname variabelen
« Reactie #11 Gepost op: 09 november 2021, 17:11:37 »
@Veerj,

De eerste stap van het volledige bestand is succesvol afgewerkt.... ;D
5 macromodules met (voorlopig) 6 variabelen in 'Global' waarmee ik dan in de werkbladmacro 13 nieuwe variabelen heb kunnen declareren.
Daarmee zijn alle basis-berekeningen afgerond.

Volgende stap is nu uitzoeken hoe ik, op basis van twee variabelen (datums), een Array kan opvullen met alle tussenliggende datums, incl de twee gegeven datums.
Naderhand zal elk van die datums moeten gecontroleerd worden op bepaalde voorwaarden.

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

Offline JEC

  • Excel-Expert
  • Ervaren lid
  • *****
  • Berichten: 422
Re: switchen tussen macro's met overname variabelen
« Reactie #12 Gepost op: 09 november 2021, 17:18:09 »
Vullen van een array met datum range


Sub jec()
 Dim ar() As Variant, fdate As Long, ldate As Long, i As Long, x As Long
 fdate = Date
 ldate = Date + 15
 
 For i = fdate To ldate
    ReDim Preserve ar(x)
    ar(x) = Format(i, "mm-dd-yyyy")
    x = x + 1
 Next
 
End Sub

Offline MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: switchen tussen macro's met overname variabelen
« Reactie #13 Gepost op: 09 november 2021, 17:34:28 »
Gewoon een probeerseltje  :)
Sub vul_array()

Dim arr()
d1 = DateSerial(2021, 11, 9)
d2 = DateSerial(2021, 11, 15)
ReDim arr(d2 - d1)
For x = 0 To UBound(arr)
    arr(x) = x + d1
Next x

End Sub
Windows 11 Home NLD 64bit
11th Gen Intel(R) Core(TM) i7-11700 @ 2.50GHz 2496
Aspire TC-1660
Intel(R) UHD Graphics 750 1024MB
476 GB SSD KINGSTON OM8PCP3512F-AA
1863 GB HD Seagate ST2000DM008-2FR102
Office 2021 Professional Plus NLD 64bit

Offline BlackDevil

  • Ambassadeur
  • *****
  • Berichten: 1.029
  • Geslacht: Vrouw
  • veni vidi vici
Re: switchen tussen macro's met overname variabelen
« Reactie #14 Gepost op: 09 november 2021, 17:38:28 »
@Veerj,

Bedankt!  _/-\o_ ;)

In bijlage hang ik eventjes een versie aan van het bestand met ingekorte macro's.
In de werkbladmacro heb ik als 'comment' de variabelen vermeld die als basis gebruikt moeten worden om de array te vullen.

groetjes,
BlackDevil
1) HP ProDesk (Windows 10 Pro Edu / Intel(R) Core(TM) i5-7500 CPU@ 3.40Ghz 3.41Ghz)
2) Laptop ASUS (Windows 10 Home / Intel(R) Core(TM) i3-3110M CPU@ 2.40GHz 2.40GHz)
Beide (RAM : 8,00 GB / 64-bits besturingssysteem, x64-processor)
Extern (Seagate Backup+ Hub 6TB / Seagate BUP Slim 2TB / Seagate Expansion Desk 5TB / HP ENVY 6030e)
Bullguard Premium Protection / Office Pro Plus 2016 NL

 


www.combell.com