Waarom wel en niet macro?

  • Onderwerp starter Onderwerp starter Senso
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Senso

Inventaris
Lid geworden
13 jun 2016
Berichten
11.171
Besturingssysteem
W10 Pro en W11 Pro
Office versie
Office 2007 H&S en Office 2021 Prof Plus
Geen macro. Is losse module.
Deze is niet te zien onder de macroknop in het lint
PHP:
Private Sub Workbook_Open()
 For Each sht In ThisWorkbook.Sheets
    Select Case sht.Name
        Case "Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec": sht.ScrollArea = "$A$1:$S$28"
    End Select
Next sht
End Sub

Wel macro.
Deze is te zien onder de macroknop in het lint.
Deze moet ik bij opening van het bestand opnieuw uitvoeren en dat is lastig en moet niet nodig zijn. Onder ThisWorkbook.
PHP:
Public Sub Set_ScrollArea()

    Dim ws As Worksheet
 
    For Each ws In ActiveWorkbook.Worksheets
        'Set scroll area:
        ws.ScrollArea = "$A$1:$G$16"
    Next ws
 
End Sub
 
Laatst bewerkt:
Beide zijn een macro.
Maar wat is nu je vraag?
 
Waarom staat de een wel onder de Macroknop en de ander niet? Zijn twee verschillende bestanden. Post 1 aangepast.

Waarom is de een statisch en de ander moet ik opnieuw uitvoeren bij opening bestand > Public Sub Set_ScrollArea()
 
Dat komt omdat de eerste een event maco is en de tweede niet.
De eerste wordt dus getriggerd door een gebeurtenis van Excel, in dit geval het openen van een document.

De tweede moet los uitgevoerd worden, maar je kan die code ook gewoon in de Workbook_Open() zetten.
Of daar vandaan aanroepen:
Code:
Private Sub Workbook_Open()
    Set_ScrollArea
End Sub
 
Laatst bewerkt:
Ik heb jouw laatste code onder ThisWorkbook gezet. Dan werkt het statisch bij opening bestand.
Voor mij is dat nu nog te volgen maar morgen weet ik het niet meer.
Kun je ThisWorkbook een naam geven bijvoorbeeld T_ScrollArea en modules kun je uitbreiden 1, 2, 3 modules kan dat ook met ThisWorkbook?
 
ThisWorkbook is een object die je kan hernoemen.
Maar de gebeurtenis bij het openen van een document niet.
Dat blijft Workbook_Open.

Daar vandaan kan je net zoveel macro's uit andere modules aanroepen als je maar wil.
 
Dus er zijn geen meer items ThisWorkbook mogelijk zoals bij de modules? Je moet dan de codes onder één ThisWorkbook zetten? Dan heeft naamgeving geen zin. Ik wil zien net als bij modules aan de naamgeving waar het om gaat bij de uitvoering.
 
Het hernoemen van ThisWorkbook heeft naar mijn mening ook geen zin.
Waar het om gaat bij uitvoering lijkt me duidelijk.,
Andere macro's kan je noemen zoals je wil zolang de naam niet met een cijfer begint.
Al die macro's kan je vanuit Workbook_Open aanroepen.
 
Waar het om gaat bij uitvoering lijkt me duidelijk.,

Dat is aan de ene kant waar, maar je kunt het aan de "buitenkant" niet zien en bij exporteren krijg je ThisWorkbook als bestandsnaam en dan weet je ook niets.

Al die macro's kan je vanuit Workbook_Open aanroepen.
Die zin begrijp ik niet.

Kun je dan wel onderstaande code in een module zetten? Deze staat nu onder ThisWorkbook.


PHP:
Private Sub Workbook_Open()
    Set_ScrollArea

    Dim ws As Worksheet
  
    For Each ws In ActiveWorkbook.Worksheets
        'Set scroll area:
        ws.ScrollArea = "$A$1:$G$16"
    Next ws
  
End Sub
 
Bij het exporteren kan je een naam geven aan het bestand dat opgeslagen gaat worden.
Je tweede macro in #1 kan je gewoon in een module zetten en dan aanroepen zoals ik in #4 liet zien.
Je moet dan wel het woord Private van die Sub verwijderen.
 
Laatst bewerkt:
Je tweede macro in #1 kan je gewoon in een module zetten en dan aanroepen zoals ik in #4 liet zien.
Die stond al in een module en was te zien als macro onder de macroknop.
Nu heb ik die eventtoestand ook in een module gezet (andere naam) maar dan is die niet zichtbaar onder de macroknop.
 
Ik begrijp niet wat je nu precies gedaan hebt.
Maar heb je de Private Sub wel gewijzigd in alleen Sub?
 
Ik heb nu twee modules gemaakt:

1. > M_SetScrollArea > als macro te zien

PHP:
Public Sub Set_ScrollArea()

    Dim ws As Worksheet
   
    For Each ws In ActiveWorkbook.Worksheets
        'Set scroll area:
        ws.ScrollArea = "$A$1:$G$16"
    Next ws
   
End Sub

2. M_SetScrollArea_EM > EM = Event Macro > niet als macro te zien
PHP:
Private Sub Workbook_Open()
    Set_ScrollArea

    Dim ws As Worksheet
   
    For Each ws In ActiveWorkbook.Worksheets
        'Set scroll area:
        ws.ScrollArea = "$A$1:$G$16"
    Next ws
   
End Sub

Zijn de codes dan goed?
 
Een event macro kan niet in een standaard module.
Die hoort bij het object dat het event veroorzaakt.
De Workbook_Open hoort dus in de ThisWorkbook module.
 
Erg jammer en teleurstellend. Is die code dan wel goed of moet die Private weg. Dus: > en dan onder ThisWorkbook
PHP:
Sub Workbook_Open()
    Set_ScrollArea

    Dim ws As Worksheet
   
    For Each ws In ActiveWorkbook.Worksheets
        'Set scroll area:
        ws.ScrollArea = "$A$1:$G$16"
    Next ws
   
End Sub

En wat als er meerdere/verschillende Event Macro's zijn zijn. Allemaal onder ThisWorkbook?
 
@Senso

Begin bij het begin: zoek een boek voor VBA in Excel.
Selekteer het hoofdstuk 'gebeurtenis-procedures' (event procedures) en lees dat rustig door.
Met hap-snap vragen word je geen steek wijzer.
 
Er is niks jammer of teleurstellend aan maar gewoon logisch.
Dat vab snb lijkt me een prima advies.
 
Begin bij het begin: zoek een boek voor VBA in Excel.
Selekteer het hoofdstuk 'gebeurtenis-procedures' (event procedures) en lees dat rustig door.

Dat heeft geen enkele zin. Ik kan me ergens in verdiepen en op dat moment weet ik hoe het zit (als ik het begrijp) en morgen weet ik het niet meer. Vaak niet eens waar ik mee bezig ben geweest. Ik heb soms wel vijf uitvoeringen van een document omdat ik niet wist dat ik het document al een keer had gemaakt.

Blijven de vragen:
1. Is de code van post 15 100% goed?
2. En wat als er meerdere/verschillende Event Macro's zijn zijn. Allemaal onder ThisWorkbook?

Overigens leg ik deze 'inhoud' vast in mijn weekkalender en heb een map basic-bestanden gemaakt dan kan ik terugkijken wat en waar.
 
1. Nee, De Workbook_Open hoort niet in een gewone module maar in de ThisWorkbook
2. Nee. En vergt nogal wat uitleg, vandaar het advies voor een boek.
 
Laatst bewerkt:
Misschien dat je hier alvast wat aan hebt.
Als je in de ThisWorkbook module zit kies dan bovenin eens voor Workbook en klik daarna rechts bovenin.
Dan zie je alle events die bij een Workbook horen.
Datzelfde kan je ook doen voor Worksheets.

ThisWorkbook Events.png
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan