Aanmaken Worddocument (op basis van template) vanuit Access

Status
Niet open voor verdere reacties.

tommeke1980

Gebruiker
Lid geworden
21 sep 2003
Berichten
11
Wanneer ik een nieuw document aanmaak op basis van mijn word-template verloopt alles zoals gewenst. Wanneer ik dit echter vanuit Access wil aanmaken, loopt de code vast.

Iemand een idee?

Tom


Dit is de code van de Word-template (de datum wordt nog wel aangemaakt - bij de header loopt het mis):
Code:
Private Sub Document_New()
Dim sDate As String
Dim strVoornaam As String
Dim strFamilieNaam As String
Dim strSchool As String
Dim strKlas As String
Dim strInstellingenPath As String
        

' De datum wordt automatisch aangemaakt
sDate = Format$(Date + 1, "Dddd dd mmmm yyyy")
ActiveDocument.Bookmarks.Item("bmDatum").Range.Text = sDate
    
' Via volgende code wordt de header ingevuld
strInstellingenPath = ThisDocument.Path & "\instellingen.txt"
If Dir(strInstellingenPath) > "" Then
    Open strInstellingenPath For Input As #1
    Input #1, strVoornaam, strFamilieNaam, strSchool, strKlas
    Close
        
    If strVoornaam = "" Or strFamilieNaam = "" Or strSchool = "" Or strKlas = "" Then
    Exit Sub
    Else
        If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
            ActiveWindow.Panes(2).Close
        End If
        If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
            ActivePane.View.Type = wdOutlineView Then
            ActiveWindow.ActivePane.View.Type = wdPrintView
        End If
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
        Selection.TypeText Text:="Schoolagenda " & strSchool & " " & "Klas " & strKlas & " - " & strVoornaam & " " & strFamilieNaam
       
        With Selection.ParagraphFormat
            .LeftIndent = CentimetersToPoints(-0.63)
            .SpaceBeforeAuto = False
            .SpaceAfterAuto = False
        End With
        ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
    End If
End If


' De cursor komt in de eerste cel te staan
ActiveDocument.Tables(1).Cell(3, 2).Select

End Sub

Dit is de code die de template oproept:
Code:
Sub CreateWLetter()
Dim oWord       As Word.Application
Dim oDoc        As Word.Document
Dim strPath As String

On Error GoTo ErrorHandler

strPath = databasepad & "\agenda.dot"

Set oWord = GetObject(, "Word.Application")

    With oWord
        Set oDoc = oWord.Documents.Add(strPath)
            With oDoc
            'Hier kun je code instellen voor handelingen binnen het document
            End With
           .WindowState = wdWindowStateMaximize
        .Visible = True
     .Activate
    End With

ErrorHandlerExit:
 Set oDoc = Nothing
 Set oWord = Nothing
 Exit Sub

ErrorHandler:
   If Err.Number = 429 Then
      Set oWord = CreateObject("Word.Application")
        Err = 0
      Resume Next
   Else
      MsgBox "Error No: " & Err.Number & "; Description: " & Err.Description
      Resume ErrorHandlerExit
   End If

End Sub
 
Het enige vreemde in de code dat ik kan ontdekken is: strPath = databasepad & "\agenda.dot"

Wat is databasepad??
Currentproject.path werkt wellicht beter.
Of is dat een modulevariabele?

Gregor
 
Sorry voor de vage vraag;
'k zal proberen wat duidelijker te zijn.

Wanneer ik vanuit Access de procedure createWletter oproep, krijg ik de foutmelding:
'Runtime Error 91: Object variable or with block variable not set'.
Wanneer ik vervolgens op 'debug' klik, wordt volgende lijn geel gemarkeerd in de vb-editor:
Code:
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then

Wanneer ik echter dubbelklik op mijn template, wordt er een nieuw word-document aangemaakt, en verkrijg ik geen foutmelding.


Databasepad =
Code:
Public Function databasepad() As String 'pad van deze database helaas geen CurrentProject.Path in '97
Dim i As Integer, dbsNaam As String

dbsNaam = CurrentDb.Name
    For i = 1 To Len(dbsNaam)
        If StrComp(Mid(dbsNaam, Len(dbsNaam) - i, 1), "\", 0) = 0 Then
            databasepad = Left(dbsNaam, Len(dbsNaam) - i - 1)
            Exit For
        End If
    Next i
End Function
 
ik denk dat die wordcode afkomstig is uit een opgenomen macro. dan maakt hij vaak gebruik van activewindow.

Vervang activewindow eens door Me.

Selection is ook een object wat dan vaak wordt gebruikt. Soms heb je een range object nodig. Maar kijk eens of je verder komt.

GG
 
Vervang activewindow eens door Me.
Wanneer ik dit toepas verkrijg ik volgende code, maar deze levert een foutmelding op (method or data member niet gevonden). Waarvoor staat deze 'Me' eigenlijk?
Code:
If Me.View.SplitSpecial <> wdPaneNone Then

Ik heb zojuist gemerkt dat de code wel juist werkt als Word reeds geopend is. Kan ik mijn probleem misschien verhelpen door code toe te voegen die eerst Word opent, en vervolgens pas de rest van de code laat lopen?

Selection is ook een object wat dan vaak wordt gebruikt. Soms heb je een range object nodig. Maar kijk eens of je verder komt.
Sorry, hier volg ik je niet (ben immers nog maar beginner wat vba betreft). Kan je even verduidelijken wat ik hier juist moet doen?
 

Bijlagen

Dat werkt inderdaad niet.

Dan zul je volledig vanuit access het doc op basis van de template moeten bewerken.
En dat kan.

Voor het aanmaken van de header
Dim oDoc As Word.Document
Dim x As Word.HeaderFooter
Dim strPath As String

On Error GoTo ErrorHandler

strPath = databasepad & "\agenda.dot"

Set oWord = GetObject(, "Word.Application")

With oWord
Set oDoc = oWord.Documents.Add(strPath)
With oDoc
'Hier kun je code instellen voor handelingen binnen het document
Set x = oDoc.Sections(1).Headers(1)
x.Range.Text = "Hallo"

End With
.WindowState = wdWindowStateMaximize
.Visible = True
.Activate
etc

GG
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan