Word VBA Extensie Word document geeft problemen bij conversie naar pdf

Status
Niet open voor verdere reacties.

KPTPTT

Gebruiker
Lid geworden
2 mrt 2018
Berichten
321
Hallo. Voor het verwerken van vele schoolrapporten heb ik een word document met invulvelden en met knoppen dmv. VBA code "geautomatiseerd". Het actieve document met de macro's is opgeslagen als .docm.

Dmv. de knop "Opslaan als docx" (cmdDocx) wordt het document opgeslagen in een gedefinieerde map als .docx document. Als ik daarna het document met de knop "Email" (cmdEmail) wordt opgemaakt, waarbij het actieve document wordt geconverteerd naar een pdf-bijlage, krijg ik de foutmelding : Fout 2147467259 (80004005) tijdens uitvoering. Dit bestand kan niet worden opgeslagen omdat het alleen-lezen is. Als u de wijzigingen wilt behouden moet u het bestand opslaan met een nieuwe naam of een andere locatie.

Ik vermoed dat bij het opslaan met de knop "Opslaan als docx" de extensie van het actieve document definitief van .docm is gewijzigd naar .docx, wordt immers succesvol opgeslagen als docx document. Ook de documentnaam is aangepast. Als ik daarna een email wilt aanmaken met de knop "Email", dan wordt een foutmelding gegeven op het moment dat in de email subroutine de conversieregel van .docm naar pdf wordt uitgevoerd. Docx en docm "bijten" elkaar? Zou na het opslaan als docx de extensie eigenlijk weer teruggesteld moeten worden naar docm, maar hoe? Het oorspronkelijk document .docm moet als .docm op het scherm geopend blijven om een volgend rapport te kunnen maken!! Wat kan ik doen?

Code:
Private Sub cmdDocx_Click()
Dim sPad As String
Dim PathName As String
Dim strFileName As String
sPad = "D:\"                                                                  'Pad naam

  With Dialogs(wdDialogFileSaveAs)
        PathName = sPad
        .Name = sPad & txtNaam & "_" & "Grp" & "-" & txtGroep & "_" & txtDatum & ".docx"
        .Format = wdFormatXMLDocument
        .CompatibilityMode = 14
        .Show
    End With
                    ' >>>>str FileName = Replace(ActiveDocument.FullName, ".docx", ".docm")      Tijdelijk als test geprobeerd om terug te zetten naar .docm, maar werkt niet goed.
End Sub


Code:
Private Sub cmdEmail_Click()
Dim strFileName As String
    Dim objOutlook  As Object
    Dim objMailItem As Object
    
    strFileName = Replace(ActiveDocument.FullName, ".docm", ".pdf")         'Conversie van docm naar pdf bijlage, werk op zich goed maar niet na opslaan als docx. >>>>>foutmelding 2147467259
    
    ActiveDocument.ExportAsFixedFormat OutputFileName:=strFileName, _
        ExportFormat:=wdExportFormatPDF
    Set objOutlook = CreateObject("Outlook.Application")
    Set objMailItem = objOutlook.CreateItem(0) ' 0 = olMailItem
    With objMailItem
        .Subject = "Kijk! Lijst," & " " & "leerling" & " " & txtNaam
        .Body = "Beste ouder(s) van" & " " & txtNaam & "," _
        .To = txtemailadres
        .Attachments.Add strFileName
        .Display ' or .Send
    End With
    Kill strFileName
    Set objMailItem = Nothing
    Set objOutlook = Nothing
End Sub
 
Laatst bewerkt:
Eerst opslaan als .docx is in principe niet nodig.
Ook een .docm kan gewoon worden opgeslagen als een PDF bestand.

In de tweede code staat een vervolg streepje aan het einde van de .Body regel.
Die hoort daar niet en is dus syntactisch fout.
 
Laatst bewerkt:
Top, bedankt. Als ik het bestand wil opslaan, moet dat in docx. Maar hierdoor veranderd de bestandsnaam en de extensie van het document. Ik heb het inmiddels opgelost door een copy van het document te openen en deze op te slaan als docx. en vervolgens te sluiten. Het oorspronkelijk docm document blijft geopend en blijft intact en kan worden geconverteerd naar pdf en als email bijlage worden verzonden.

Code:
Private Sub cmdDocx_Click()
Dim sPad As String
Dim PathName As String
sPad = "D:\"                                                                  'Pad naam

Application.Documents.Add ActiveDocument.FullName         'Tijdelijk copy van het document

    With Dialogs(wdDialogFileSaveAs)
        PathName = sPad
        .Name = sPad & txtNaam & "_" & "Grp" & "-" & txtGroep & "_" & txtDatum & ".docx"   '"C:\gebruikers\mail\Documents\" &
        .Format = wdFormatXMLDocument
        .CompatibilityMode = 14
        .Show
    End With
    
ActiveDocument.Close            'Sluiten van de tijdelijke copy van het document
    
End Sub
 
Je huidige docm document kan je zo opslaan als docx:
Code:
ActiveDocument.SaveAs2 FileName:=Replace(ActiveDocument.FullName, "docm", "docx"), FileFormat:=wdFormatDocumentDefault

Die FileName:=Replace(ActiveDocument.FullName, "docm", "docx") kan je uiteraard naar wens aanpassen.
 
Laatst bewerkt:
Dank voor je bijdrage. Met je code kun je inderdaad docm "converteren" naar docx. Maar waar ik mee zit is dat het oorspronkelijke docm document open moet bllijven staan om daarna een nieuw rapport te kunnen maken. Als ik docm opsla als docx veranderd de bestandnaam in die van een leerling en kan ik de docx daarna niet meer gebruiken als docm voor een nieuw rapport. Ik waardeer je bijdrage zeer maar ik heb mijn oplossing getest en deze werkt naar behoren. nogmaals dank.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan