opslaan via VBA code word 2010

Status
Niet open voor verdere reacties.

andrevanderhors

Gebruiker
Lid geworden
24 mrt 2012
Berichten
18
Hallo

Ik heb ergens gevonden dat je met document eigenschappen title de naam automatisch kan laten invullen tijdens opslaan. Echter werkt ditniet of doe ik iets fout. Na wat zoeken komt het er op neer dat de meeste forums zeggen dat ik een VBA code moet gebruiken.
Uiteraard heb ik niet zo veel ervaring en vraag mij af of dit een simpele code is?

De vraag is dus:
Ik zou graag een VBA code voor word2010 hebben die mijn bestand opslaat vanuit een tekstveld in een bepaalde directory.
 
Neem eens een macro op die met <Opslaan als> je document opslaat, dan heb je het grootste deel van je VBA code al.
 
Code:
Sub Macro2()
'
' Macro2 Macro
'
'
    ChangeFileOpenDirectory "C:\Users\andre\Documents"
    ActiveDocument.SaveAs2 FileName:="opslaan.docx", FileFormat:= _
        wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
        :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
        :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False, CompatibilityMode:=14
End Sub

Alvast dank voor uw reactie.
Dat had ik al gedaan en dit was de uitkomst daarvan.
Echter zou ik niet weten hoe ik de filename hierin variabel kan maken aan de hand van een veld in het word document.
Het lukt me niet het veld te electeren zodra opname macro aanstaat.
 
Dat kan inderdaad niet, en dat hoeft ook niet. Zodra je de basismacro hebt, kun je die wel zodanig aanpassen dat hij beter werkt. In jouw geval heb je het steeds over 'een veld', maar dat is nogal vaag. Wat voor soort veld? Heeft het een bladwijzernaam? Is het een DocVariable? Een samenvoegveld? Kortom: we moeten wat meer weten. Kun je niet een voorbeeldje maken?
 
Probeer het eens met deze macro:
Code:
Private Sub Document_Close()
Dim cc As ContentControl
Dim sNaam As String, sPad As String

    Set cc = ActiveDocument.ContentControls.Item(3)
    If cc.Range.Text = "" Then
        sNaam = InputBox("Geef de bestandsnaam", "Bestandsnaam invoeren")
    Else
        sNaam = cc.Range.Text
    End If
    sPad = "C:\Users\andre\Documents\"
    ActiveDocument.SaveAs2 FileName:=sPad & sNaam & ".docx", FileFormat:=wdFormatXMLDocument, AddToRecentFiles:=True, CompatibilityMode:=14
End Sub

Wel je brondocument opslaan met als docm, anders ben je de macro kwijt :).
 
Ben even aan het testen geweest en eerste stappen werken wel.

In dit voorbeeld is ActiveDocument.ContentControls.Item(3) het derde veld in het document?

Stel dat het een ander veld is kan ik dan ergens dit nummer vinden?


En als ik de tekst krijg om bestandnaam in te voeren en ik druk op annuleer start de foutopsporing.

fout.PNG

fout 2.PNG
 
Het is verstandig geen spaties te gebruiken in directory-namen.

Code:
Private Sub Document_Close()
    c00= ActiveDocument.ContentControls(3).range.text
    If c00 = "" Then c00=InputBox("Geef de bestandsnaam", "Bestandsnaam invoeren")

    ActiveDocument.SaveAs2 "C:\Users\andre\Documents\" & c00 & ".docx"
End Sub

Als je ongeldige tekens voor een bestandsnaam invoert krijg je natuurlijk een foutmelding.
 
Laatst bewerkt:
Stel dat het een ander veld is kan ik dan ergens dit nummer vinden?
In dat geval is het beter om door de collectie te zoeken naar de titel van de control.
Code:
    For Each cc In ActiveDocument.ContentControls
        If cc.Title = "Titel" Then
            Set cc = ActiveDocument.ContentControls.Item(cc.ID)
            If cc.Range.Text = "" Or cc.Range.Text = "[Titel]" Then
                sNaam = InputBox("Geef de bestandsnaam", "Bestandsnaam invoeren")
            Else
                sNaam = cc.Range.Text
            End If
        End If
    Next cc
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan