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 4689 keer)

0 leden en 1 gast bekijken dit topic.

Offline BlackDevil

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

Wel....  ;D

Voor één Select Case blok valt het al bij al misschien wel mee maar ik heb, enkel en alleen nog maar voor die omkaderingen, zo'n 7-tal zoek-acties met een Select Case blok met elk 7 Case-elementen waarvan elk dus toch wel met wat lijntjes code.
Alles in totaal (voor die omkaderingen) heb ik toch al zo'n ruim 450 lijntjes code  :D :D.

Vandaar dus mijn vraag of het eventueel ook anders kon met ingekorte code  ;D

Maar ik zie wel hoe ik het eventueel helemaal anders kan aanpakken  ;)

Toch bedankt voor je reactie  :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 MollyVH

  • Excel-Expert
  • Oplosser
  • *****
  • Berichten: 847
Re: switchen tussen macro's met overname variabelen
« Reactie #46 Gepost op: 13 november 2021, 18:12:42 »
Citaat
Toch bedankt voor je reactie
die toch een mogelijkheid bevatte over hoe je het anders zou kunnen doen(?). Met in jouw vorige post enkel een overzicht betreffende wat bij Case 2 moest gebeuren viel er niets zinnigers over te zeggen.

Probeer misschien eens volgende in een leeg bestand. Ik heb slechts enkele opmaaklijntjes behouden en 2 mogelijke waarden voor 'dag', gewoon om de methode aan te tonen.
Veronderstel dus dat je code er zo uitzag:
Sub test1()

dag = 2
Set cel4 = Range("D5")
Select Case dag
    Case 2
        With cel4.Resize(1, 6)
            .Borders(xlEdgeLeft).LineStyle = 1
            .Borders(xlEdgeTop).LineStyle = 1
            .Borders(xlEdgeRight).LineStyle = 1
        End With
        cel4.Offset(1, -1).Resize(1, 1).Borders(xlEdgeTop).LineStyle = 1
    Case 3
        With cel4.Resize(1, 5)
            .Borders(xlEdgeLeft).LineStyle = 1
            .Borders(xlEdgeTop).LineStyle = 1
            .Borders(xlEdgeRight).LineStyle = 1
        End With
        cel4.Offset(1, -2).Resize(1, 2).Borders(xlEdgeTop).LineStyle = 1
End Select

End Sub

Die kan je dan omvormen tot bv.
Sub test2()

dag = 2
Set cel4 = Range("D5")
Select Case dag
    Case 2
        r1v = 1: r1h = 6: o1v = 1: o1h = -1: r2v = 1: r2h = 1
    Case 3
        r1v = 1: r1h = 5: o1v = 1: o1h = -2: r2v = 1: r2h = 2
End Select
With cel4.Resize(r1v, r1h)
    .Borders(xlEdgeLeft).LineStyle = 1
    .Borders(xlEdgeTop).LineStyle = 1
    .Borders(xlEdgeRight).LineStyle = 1
End With
cel4.Offset(o1v, o1h).Resize(r2v, r2h).Borders(xlEdgeTop).LineStyle = 1

End Sub

Bij mijn keuze voor variabelenamen deed ik: "r1v" staat voor "resize 1 verticaal".
En bij 7 mogelijke waarden win je uiteraard veel meer.

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 #47 Gepost op: 13 november 2021, 18:51:38 »
@MollyVH,

mijn oprechte excuses, soms ben ik dusdanig aan het multi-tasken dat ik mij volledig verkeerd uitdruk  ;).
Mijn "toch bedankt voor jouw reactie" moest eigenlijk zijn "alvast bedankt voor jouw suggestie".

En met dat ik nog wel ging bekijken hoe ik het dan allemaal zou aanpakken bedoelde ik dus dat ik, inclusief jouw suggestie,
eens ging bekijken hoe ik het van in het begin eventueel anders zou kunnen opbouwen.

Want ja niet elke zoekactie heeft exact dezelfde voorwaarden en handelingen.

Hieronder eventjes het code-blok voor één van de zoekacties :

''zomervakjuli omkaderen
dag2 = DateSerial(jaar, 7, 1)
Set cel4 = Range("C16:I21").Find(dag2)
    If Not cel4 Is Nothing Then
        Select Case Weekday(dag2, vbMonday)
            Case 1
                With cel4.Resize(4, 7)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeTop).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                End With
                cel4.Offset(3, 3).Resize(1, 4).Borders(xlEdgeBottom).LineStyle = 1
                With cel4.Offset(4).Resize(1, 3)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                    .Borders(xlEdgeBottom).LineStyle = 1
                End With
            Case 2
                With cel4.Resize(1, 6)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeTop).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                End With
                cel4.Offset(1, -1).Borders(xlEdgeTop).LineStyle = 1
                With cel4.Offset(1, -1).Resize(3, 7)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                End With
                cel4.Offset(3, 3).Resize(1, 3).Borders(xlEdgeBottom).LineStyle = 1
                With cel4.Offset(4, -1).Resize(1, 4)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                    .Borders(xlEdgeBottom).LineStyle = 1
                End With
            Case 3
                With cel4.Resize(1, 5)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeTop).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                End With
                cel4.Offset(1, -2).Resize(1, 2).Borders(xlEdgeTop).LineStyle = 1
                With cel4.Offset(1, -2).Resize(3, 7)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                End With
                cel4.Offset(3, 3).Resize(1, 2).Borders(xlEdgeBottom).LineStyle = 1
                With cel4.Offset(4, -2).Resize(1, 5)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                    .Borders(xlEdgeBottom).LineStyle = 1
                End With
            Case 4
                With cel4.Resize(1, 4)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeTop).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                End With
                cel4.Offset(1, -3).Resize(1, 3).Borders(xlEdgeTop).LineStyle = 1
                With cel4.Offset(1, -3).Resize(3, 7)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                End With
                cel4.Offset(3, 3).Resize(1, 1).Borders(xlEdgeBottom).LineStyle = 1
                With cel4.Offset(4, -3).Resize(1, 6)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                    .Borders(xlEdgeBottom).LineStyle = 1
                End With
            Case 5
                With cel4.Resize(1, 3)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeTop).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                End With
                cel4.Offset(1, -4).Resize(1, 4).Borders(xlEdgeTop).LineStyle = 1
                With cel4.Offset(1, -4).Resize(4, 7)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                    .Borders(xlEdgeBottom).LineStyle = 1
                End With
            Case 6
                With cel4.Resize(1, 2)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeTop).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                End With
                cel4.Offset(1, -5).Resize(1, 5).Borders(xlEdgeTop).LineStyle = 1
                With cel4.Offset(1, -5).Resize(4, 7)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                End With
                cel4.Offset(4, -4).Resize(1, 6).Borders(xlEdgeBottom).LineStyle = 1
                With cel4.Offset(5, -5)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                    .Borders(xlEdgeBottom).LineStyle = 1
                End With
            Case 7
                With cel4
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeTop).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                End With
                cel4.Offset(1, -6).Resize(1, 6).Borders(xlEdgeTop).LineStyle = 1
                With cel4.Offset(1, -6).Resize(4, 7)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                End With
                cel4.Offset(4, -4).Resize(1, 5).Borders(xlEdgeBottom).LineStyle = 1
                With cel4.Offset(5, -6).Resize(1, 2)
                    .Borders(xlEdgeLeft).LineStyle = 1
                    .Borders(xlEdgeRight).LineStyle = 1
                    .Borders(xlEdgeBottom).LineStyle = 1
                End With
        End Select
    End If

Ik zal dus zeker jouw voorbeeld gebruiken als leidraad in mijn heropbouw  :thumbsup: _/-\o_

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 #48 Gepost op: 14 november 2021, 11:55:12 »
Goedemiddag allemaal,

Mijn volgende stap is alle datums die in een bepaald array staan in te kleuren.
Dat werkt in principe correct maar ik ben toch wel op een (beetje vreemd) probleem gestoten.

Ik moet onder andere de periode van de kerstvakantie in januari inkleuren.
Voor elk jaar doet hij dit goed BEHALVE als 1 januari op een maandag valt, dan kleurt hij spontaan 1 november in en blijft 1 januari zonder kleur.
Wanneer 1 januari dus op een andere weekdag valt kleurt hij wel 1 januari in.

Iemand een idee wat de oorzaak hiervan kan zijn?

Alvast dank.

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 #49 Gepost op: 14 november 2021, 12:43:49 »
Hallo BlackDevil,

Citaat
dan kleurt hij spontaan 1 november
Oei, ik denk niet dat hij veel spontaan doet, de kans is groter dat het in de code zit  :glare:

Het zal vermoedelijk in een héél klein hoekje zitten, maar ik ben bang dat dit een onhaalbare kaart zal zijn zonder voorbeeldbestandje.
Ik weet wel dat het om een reuzeproject gaat, maar valt het voor jou te doen om in een kopie enkel de relevante zaken hieromtrent te behouden?
Anders valt er mogelijk iets op met enkel de gebruikte code, maar dat is afwachten.

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 #50 Gepost op: 14 november 2021, 12:55:48 »
@MollyVH,

Bedankt voor je reactie  ;).

Wou net opnieuw een berichtje plaatsen om te melden dat ik het opgelost gekregen heb toen ik zag dat je gereageerd had.

Blijkbaar is dit een veel voorkomend probleem met de .Find optie in combinatie met hoe vba omgaat met datums, de problemen komen vooral voor met datums tussen de maanden januari/november en februari/december.

1 januari staat in mijn bestand dus op rij 7 en de range start in kolom C, en ik had dus Range("C7:AW12, C16:AW21")
als range opgegeven. Ik heb dit nu gewijzigd naar Range("B7:AW12, B16:AW21") en nu doet hij het wél correct. :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 #51 Gepost op: 16 november 2021, 08:01:19 »
Goedemorgen allen,

Ik heb nog eens een vraagje.
Het bestand is volledig af en nu dat de code voor alle soorten opmaak met hun corresponderende voorwaarden volledig uitgewerkt is heb ik een beter zicht op de totaliteit.
Ik ben dan gisteren begonnen met het nagaan waar de code eventueel kan ingekort/samengevoegd worden en dit ging voor alle onderdelen vrij vlotjes, tot ik aan het laatste onderdeel kwam.
Ik heb dus in een Select Case, twee Case-blokken met elk dezelfde voorwaarden en acties, enkel de periode is verschillend. Ik probeer reeds sinds gisterenmiddag om deze samengevoegd te krijgen, heb al op ettelijke manieren geprobeerd, maar het lijkt me maar niet te lukken. Vermoedelijk ga ik het weer veel te ver zoeken en/of ben ik er al te lang op bezig of is het simpelweg niet mogelijk maar ik wou toch eventjes hier navragen of en hoe het toch mogelijk zou zijn. De twee case-blokken behoren tot een Select Case met meerdere case-blokken en zou toch wel binnen die structuur moeten blijven omdat die Select Case onderdeel is van een For Each… Next-loop.
Gemakshalve heb ik de  For Each... Next-loop ingekort en beperkt tot de twee betreffende Case-blokken.

Dit is de code die ik nu heb voor de betreffende Case-blokken :

For Each dag In arJaarkalender
    ReDim Preserve arA(a)
    ReDim Preserve arB(b)
        Select Case dag
            'Case
                'code
            Case dat13 To dat13b            '=krokusvakantie
                Select Case Day(dat13 - 2)
                    Case 1 To 7, 15 To 21, 29 To 31
                        Select Case Weekday(dag, vbMonday)
                            Case 1 To 3
                                arA(a) = dag
                                a = a + 1
                            Case 4 To 7
                                arB(b) = dag
                                b = b + 1
                        End Select
                    Case 8 To 14, 22 To 28
                        Select Case Weekday(dag, vbMonday)
                            Case 1 To 3
                                arB(b) = dag
                                b = b + 1
                            Case 4 To 7
                                arA(a) = dag
                                a = a + 1
                        End Select
                End Select
            Case dat15 To dat15b            '=herfstvakantie
                Select Case Day(dat15 - 2)
                    Case 1 To 7, 15 To 21, 29 To 31
                        Select Case Weekday(dag, vbMonday)
                            Case 1 To 3
                                arA(a) = dag
                                a = a + 1
                            Case 4 To 7
                                arB(b) = dag
                                b = b + 1
                        End Select
                    Case 8 To 14, 22 To 28
                        Select Case Weekday(dag, vbMonday)
                            Case 1 To 3
                                arB(b) = dag
                                b = b + 1
                            Case 4 To 7
                                arA(a) = dag
                                a = a + 1
                        End Select
                End Select
            'Case
                'code
            'Case
                'code
        End Select
Next dag

Alvast mijn oprechte dank.

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 #52 Gepost op: 16 november 2021, 10:38:05 »
Hallo BlackDevil,

Probeer deze eens:
Select Case dag
    'Case
        'code
    Case dat13 To dat13b,  dat15 To dat15b
        If dag >= dat13 And dag <= dat13b Then
            dag_tmp = dat13 - 2      'krokusvakantie
        Else
            dag_tmp = dat15 - 2      'herfstvakantie
        End If
        Select Case dag_tmp
            Case 1 To 7, 15 To 21, 29 To 31
                Select Case Weekday(dag, vbMonday)
                    Case 1 To 3
                        arA(a) = dag
                        a = a + 1
                    Case 4 To 7
                        arB(b) = dag
                        b = b + 1
                End Select
            Case 8 To 14, 22 To 28
                Select Case Weekday(dag, vbMonday)
                    Case 1 To 3
                        arB(b) = dag
                        b = b + 1
                    Case 4 To 7
                        arA(a) = dag
                        a = a + 1
                End Select
        End Select
    'Case
        'code
    'Case
        'code
End Select

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 #53 Gepost op: 16 november 2021, 12:08:29 »
Goeiemiddag MollyVH,

Ik wist dat ik een opbouw moest creëren waarbij ik aan vba een duidelijk onderscheid tussen beide periodes kon laten maken.
Als ik nu jouw oplossing bekijk is meteen duidelijk dat ik het effectief véél te ver ben gaan zoeken  ;D want op deze wijze een tijdelijke variabele maken hebben ik al honderden keren in andere projecten gedaan...  :-[

Hartstikke bedankt voor jouw oplossing  _/-\o_ :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

 


www.combell.com