Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[word 2007/vba] opslaan van een document

Pagina: 1
Acties:

  • alexbl69
  • Registratie: Maart 2001
  • Laatst online: 22:17
Ik ben bezig een Word vba macro te schrijven en loop tegen het volgende probleem aan:

Als een gebruiker het document sluit moet de vraag worden gesteld of het document opgeslagen moet worden. Is dit het geval, dan moet het document onder een door mij gespecificeerde naam en plaats opgeslagen worden.

Aangezien het document gesloten wordt gebeurt e.e.a. in de routine Document_Close(). Dit betekent ook dat ik het commando ActiveDocument.Close.... niet kan gebruiken, aangezien hij dan zijn eigen routine weer aanroept.

Tevens heb ik geprobeert met een eigen MsgBox de keuzes te splitsen. Het opslaan (SaveAs.., Application.Quit) werkt dan zonder problemen, maar het niet opslaan werkt niet. Het commando Application.Quit geeft dan een foutmelding dat mijn MsgBox form nog openstaat.

Er zal wel een heel eenvoudige oplossing voor zijn, maar ik zie hem even niet :X .

If buying doesn’t mean ownership Then pirating isn’t stealing / iRacing Profiel


  • alexbl69
  • Registratie: Maart 2001
  • Laatst online: 22:17
Gelukkig, heb het zelf al opgelost. Code:


VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Document_Close()
    ActiveDocument.Saved = True
    
    'Document opslaan indien gevuld
    If MsgBox("Document opslaan ?", vbYesNo) = vbYes Then
        Dim FileNaam As String
        FileNaam = Nummer & " " & ActiveDocument.ContentControls(2).Range.Text
        FileNaam = RemoveIllegal(FileNaam)
        ActiveDocument.SaveAs FileName:=SaveDir & FileNaam
    End If
    
    Application.Quit savechanges:=wdDoNotSaveChanges
End Sub


Probleem was dat de standaard Word save dialoog box bleef verschijnen. Middels 'ActiveDocument.Saved = True' vertel je Word dat het document al gesaved is en dat de dialoogbox niet meer nodig is.

If buying doesn’t mean ownership Then pirating isn’t stealing / iRacing Profiel


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Misschien is een ander event handiger. Even vrij naar het voorbeeld van DocumentBeforeClose:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public WithEvents appWord As Word.Application

Private Sub appWord_DocumentBeforeClose _
        (ByVal Doc As Document, _
        Cancel As Boolean)

    Dim intResponse As Integer

    intResponse = MsgBox("Do you really " _
        & "want to close the document?", _
        vbYesNo)

    Cancel = True

    If intResponse = vbYes Then
        Application.Quit WdSaveOptions.wdDoNotSaveChanges
    End If
End Sub

Private Sub Document_Open()
    Set appWord = Word.Application
End Sub

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten