Word 2010: Automatisch macro starten bij opstarten van Word (voor tonen kopniveau 1)

Status
Niet open voor verdere reacties.

Winterkoning

Gebruiker
Lid geworden
16 jun 2007
Berichten
204
Ik zou het fijn vinden als het navigatievenster in Word 2010 bij het openen van bestaande documenten in het navigatievenster het kopniveau niet automatisch opent tot op niveau 3, maar het bij kopniveau 1 houdt. De macro die ik daarvoor met hulp van enkele internetbronnen gemaakt heb, is de onderstaande. Bovenaan staat eerst een macro voor wachttijd, omdat hij niet direct kan starten bij het opstarten van Word.

Code:
Sub Wait(n As Long)
    Dim t As Date
    t = Now
    Do
        DoEvents
    Loop Until Now >= DateAdd("s", n, t)
End Sub

Private Sub Document_Open()
' Activate Navigation Pane
' Collapse All, to only show heading level 1
Call Wait(1)
ActiveWindow.DocumentMap = True
  If ActiveWindow.DocumentMap = True Then
'  Ctrl-F = Find --> this sets the cursor at the top of the navigation pane
'  Shift-F10 = Context Menu
'  C = Collapse All
'  ^ = Ctrl key
'  + = Shift key
    SendKeys "^(f){TAB}{TAB}{TAB}{TAB}{TAB}{TAB}+({F10})c"
  End If
  ActiveWindow.View.ShowHeading (1)
End Sub

De macro werkt prima als ik hem als gewone macro start, maar als ik hem "Private Sub Document_Open()" zoals hierboven noem, dan doet hij het niet. (d.w.z. als ik hem Sub Document_Open() noem en start als normale macro dan werkt hij, maar hij werkt niet als ik hem Private Sub Document_Open() noem en verwacht dat ie start bij het opstarten)

Nu wil ik deze macro niet handmatig in al mijn bestaande documenten moeten toevoegen maar in het sjabloon 'Normal', zodat hij elke keer vanzelf start als ik een bestaand document open. Het probleem is echter dat Word een foutmelding geeft als ik hem onder Normal, Microsoft Word Objects, ThisDocument plaats, nl. 'run-time error 91: object variable or with block variable not set'. En als ik de macro onder Normal, modules, NewModules plaats, dan doet Word niets.

Ik hoop dat jullie me kunnen helpen. Bedankt!
 
Laatst bewerkt:
Je weet zo te zien al hoe je een berichtje kunt aanpassen, dus het mag niet te lastig zijn om die techniek nogmaals te gebruiken om de code op te maken met de CODE knop (#). Dan is de code een stuk leesbaarder, zoals je na 7 jaar HelpMij vast wel weet :).
 
Volgens mij heb je die Wait helemaal niet nodig, want de macro doet het prima (met een kleine aanpassing die volgens mij wat beter werkt) op de Normal sjabloon.
Code:
Private Sub Document_Open()

    Application.ScreenUpdating = False
    ActiveWindow.DocumentMap = True
    If ActiveWindow.DocumentMap = True Then
        '  Ctrl-F = Find --> this sets the cursor at the top of the navigation pane
        '  Shift-F10 = Context Menu
        '  C = Collapse All
        '  ^ = Ctrl key
        '  + = Shift key
        SendKeys "^(f){TAB}{TAB}{TAB}{TAB}{TAB}{TAB}+({F10})k1"
    End If
    Application.ScreenUpdating = True

End Sub
De code moet dan niet in een module staan, maar in de klassemodule ThisDocument.
 
Bedankt voor het helpen Octafish. Helaas lukt het me niet.

Als ik jouw code toevoeg in Normal - Microsoft Word-objecten - ThisDocument, dan geeft hij nog steeds dezelfde foutmelding namelijk: 'run-time error 91: object variable or with block variable not set.

Als ik dan de foutoplossing opstart geeft hij aan dat hij de programmacode niet kan uitvoeren in de onderbrekingsmodus. Ten slotte verwijst hij met een gele regel naar deze regel van de code:
Code:
    ActiveWindow.DocumentMap = True

Wat doe ik fout?
 
Laatst bewerkt:
Wat doe ik fout?
Ik kan het je eerlijk gezegd niet zeggen; bij mij doet de macro het prima. Ook als ik hem inkort tot het minimale. Maar probeer hem eens zo:

Code:
Private Sub Document_Open()

    Application.ScreenUpdating = False
    CommandBars("Navigation").Visible = True
    SendKeys "^(f){TAB}{TAB}{TAB}{TAB}{TAB}{TAB}+({F10})k1"
    Application.ScreenUpdating = True

End Sub
 
Ja! Die werkt wel.

Kan het misschien liggen aan het feit dat ik wel macro's heb staan in Normal - Modules - NewMacros?
 
Je mag net zoveel macro's opslaan als je wilt, mits ze werken :). Kijk eens of Compileren problemen vindt. Daarnaast is het object DocumentMap verouderd (t/m vs 2007) en is de Commandbars dus (vanaf 2010) betrouwbaarder.
 
Op zich werkt de macro goed, op twee dingen na:

- Numlock wordt uitgeschakeld als ik een Wordbestand open
- als Word opstart door een snelkoppeling in de Windows opstarten map naar een Wordbestand, dan geeft Word een foutmelding
 
Ik heb het probleem met NUM LOCK opgelost door dit stukje code na de Sendkeys te plaatsen:

Code:
Sendkeys "{NUMLOCK}", True
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan