Word document aanpassen via vba access

Status
Niet open voor verdere reacties.

ilse20

Gebruiker
Lid geworden
23 feb 2010
Berichten
16
Hallo,

Ik ben bezig met access programmeren.

ik wil labels generen naar een pdf file. maar in een pdf file kan ik de margins niet wijzigen. nu wilde ik het via een word file doen.
ik kan wel het normal.dot file wijzigen met daarin de juiste margins, maar dan geld dat voor alle word document.

Ik heb nu code waarmee ik een nieuwe word document aanmaken in VBA Acccess:
Code:
Dim word 'the Word application
    Dim doc 'the Word document
    Dim selection 'text selection
    Dim fs 'the File system
    Dim work_dir 'the directory for storing files
    Dim folder, folders 'used when creating the new file
    Dim i, j 'indexes for arrays
    Dim h_Filepath As String

    work_dir = "C:\Users\Piper\Desktop\"
    h_filpath = "work_dir" & "labels.doc"
    
    Set word = CreateObject("word.application")
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    Set doc = word.Documents.Add
    Set selection = word.selection
    selection.typetext "An Automated Word Report"
    selection.typeparagraph
    
    If Not fs.folderexists(work_dir) Then
        folders = Split(work_dir, "\")
            For i = 0 To UBound(folders) - 1
                folder = ""
            For j = 0 To i
                folder = folder & folders(j) & "\"
            Next
                If Not fs.folderexists(folder) Then
                    fs.createfolder folder
                End If
            Next
    End If

    doc.SaveAs (work_dir & "labels.doc")
    word.Visible = True
    
    Set fs = Nothing
    Set word = Nothing

deze code maakt het word bestand aan en daarin staan dan de margins wel goed, omdat ik dat verandert heb in normal.dot

nu heb ik ook al code om dat pdf file te generen:
Code:
Dim h_qdfnew As DAO.QueryDef
    Dim h_strSQL As String
    Dim ChosenName As String
    Dim h_stdocname As String
    Dim h_Filepath As String
    Dim h_Queryname As String
    Dim h_qdf As DAO.QueryDef
    Dim h_amountlabels As String
    Dim h_table As String
    Dim h_TemplateFile As String
    Dim h_LabelFile As String
        
    h_Filepath = "C:\Users\Piper\Desktop\labels.doc"
    h_TemplateFile = "C:\Users\Piper\AppData\Roaming\Microsoft\Templates\Normal.dot"
    h_LabelFile = "C:\Users\Piper\Desktop\labels.pdf"
    ChosenName = "ilse van broekhoven"
    h_strSQL = "SELECT * FROM Generate_labels WHERE ChangeUserName = '" & ChosenName & "';"
    h_Queryname = "Query_labels"
    h_stdocname = "Adresetiketten Generate_labels_Query"
    h_table = "Generate_labels"
    
     For Each h_qdf In CurrentDb.QueryDefs
            If h_qdf.Name = h_Queryname Then
                CurrentDb.QueryDefs.Delete (h_Queryname)
            End If
        Next h_qdf
        
    Set h_qdfnew = CurrentDb.CreateQueryDef(h_Queryname, h_strSQL)
    h_amountlabels = DCount("ChangeUserName", h_table, "ChangeUserName = '" & ChosenName & "'")
        
        If h_amountlabels < 1 Then
            MsgBox "No labels saved for current user" & vbNewLine & "Please save a label first"
        Else
            With DoCmd
                MsgBox "Don't forget to press the CLEAR LABELS button when you have printed the labels!"
                .OutputTo acOutputReport, h_stdocname, acFormatRTF, h_Filepath, False, h_TemplateFile, , acExportQualityScreen
                .OutputTo acOutputReport, h_stdocname, acFormatPDF, h_LabelFile, True, , , acExportQualityScreen
            End With
        End If

deze code maakt word file aan en genereert daarvan het pdf file maar dan staan de margins niet goed en daardoor komen de labels er niet goed op te staan.

nu was mijn vraag of het ook mogelijk is om op zo'n manier ook de marginssettings mee te geven.
of dat het misschien mogelijk is om een template aan te maken dat alleen voor dat bestand gebruikt wordt.
 
Ilse,

Naast Normal.dot kun je zoveel .dot files neerzetten als je wilt.
Maak bijvoorbeeld een Label2PDF.dot aan, stel alles in zoals jij het hebben wilt en roep deze dan aan met de code.
 
Laatst bewerkt:
ja dat had ik ook al geprobeerd. ik had een template file label.dot aangemaakt. maar als ik die in de outputto zet werkt het niet. maakt niet uit of ik hem in de templatefile of outputfile zet. die margins en instellingen die ik dan heb gedaan in label.dot onthoud ie niet ofzo.
 
Je maakt het jezelf onnodig moeilijk: outputto is geen geschikte methode voor wat je wil.

Maak een nieuw bestand in Word.
Koppel het bestand met afdruk samenvoegen (etiketten) aan een tabel of query van je Access database.
Stel de velden en de marges in en sla het bestand op als bijv. E:\proef.docx. (het hoeft helmaal geen sjabloon te zijn, want je kunt ieder gewoon Word-document als sjabloon gebruiken; maar zelfs dat is in dit geval niet nodig.)
Als je met dit bestand vanuit VBA-code in Access wil werken kan dat met 2 regels (bijv. om af te drukken)
Code:
  With GetObject(""E:\proef.docx")
     .printout true
     .close 0
  End with
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan