Word 2016 openen vanuit Access 2016

Status
Niet open voor verdere reacties.

fwalraven

Gebruiker
Lid geworden
30 apr 2006
Berichten
150
Hallo,
Als ik de opdracht geef om vanuit Access een Word-sjabloon te vullen gaat het goed tot ik de melding krijg van bevestiging opslaan.
Als ik op Oke druk, verschijnt Word knipperend onder op de taakbalk en verschijnt de foutmelding:

ERROR No: 5; Description: Ongeldige procedure-aanroep of ongeldig argument.

Bij oke verdwijnt de melding.
Klik ik daarna op het knipperend Word Symbool op de taakbalk dan wordt Word pas geopend.

Hoe voorkom ik dat Word eerst op de taakbalk komt in plaats van rechtstreeks te openen?

Code zie bijlage.

Mvg Frans
 

Bijlagen

  • VBA code Word.docx
    14,4 KB · Weergaven: 40
Het is gebruikelijk in dit forum om VBA-code tussen Code Tags in een bericht te plaatsen.
 
Hallo,
Als ik de opdracht geef om vanuit Access een Word-sjabloon te vullen gaat het goed tot ik de melding krijg van bevestiging opslaan.
Als ik op Oke druk, verschijnt Word knipperend onder op de taakbalk en verschijnt de foutmelding:

ERROR No: 5; Description: Ongeldige procedure-aanroep of ongeldig argument.

Bij oke verdwijnt de melding.
Klik ik daarna op het knipperend Word Symbool op de taakbalk dan wordt Word pas geopend.

Hoe voorkom ik dat Word eerst op de taakbalk komt in plaats van rechtstreeks te openen?

Zie onderstaande code.

Mvg Frans


Code:
Private Sub KnopWordlijst_Click()
Dim strbestnaam     As String
Dim persoonlijkeDir As String
Dim ObjWrd          As Word.Application
Dim objWDoc         As Word.Document
Dim objWrange       As Word.Range
Dim oCtl            As Access.Control
Dim WordRunning     As Boolean
Dim fileexist       As Boolean
Dim IANTWOORD As Integer
Dim BasisDirectory As String
Dim strDirectory As String
On Error GoTo errorhandler
BasisDirectory = Application.CurrentProject.path
strDirectory = Left$(CurrentProject.path, InStrRev(CurrentProject.path, "\"))
persoonlijkeDir = strDirectory & "DOSSIERS\" & Me.Persoonssleutel & "\"
strbestnaam = persoonlijkeDir & "Onderzoek" & ".doc"

   If Len(Dir(strbestnaam, vbNormal)) <> 0 Then
          IANTWOORD = MSgbox("LIJST ONDERZOEK BESTAAT REEDS !" _
    & vbCr & vbCr & "OPNIEUW SAMENSTELLEN ?" _
   & vbCr, vbYesNoCancel, "MAAK EEN KEUZE")
Select Case IANTWOORD
Case vbYes
fileexist = False
Case vbNo
fileexist = True
Case vbCancel
Exit Sub
End Select
End If

If Not fFolderBestaat(strDirectory) Then fMaakFolder (strDirectory)
If Not fFolderBestaat(persoonlijkeDir) Then fMaakFolder (persoonlijkeDir)

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

If fileexist = True Then
ObjWrd.Visible = True 'Toon de word-applicatie
ObjWrd.Documents.Open (strbestnaam) 'Open het bestand
ObjWrd.Activate 'Activeer Word met het geopende bestand
Else
 Set objWDoc = ObjWrd.Documents.Add(strDirectory & "formulieren\Onderzoek.dot")
    With ObjWrd
        .ScreenUpdating = False
        With objWDoc
        
        Set objWrange = .GoTo(What:=wdGoToBookmark, Name:="A")
        If Format(Forms![KVB]!Datumcontact.Value) = "" Then objWrange.Text = "N.v.T" Else objWrange.Text = Format(Forms![KVB]!Datumcontact.Value, "dddd dd mmmm yyyy") & " om " & Format([Forms]![KVB]!Tijdcontact.Value, "hh:mm") & " uur."
"etc, etc,
            .SaveAs FileName:=strbestnaam, FileFormat:=wdFormatDocument
        End With
        MSgbox "Het bestand is opgeslagen in:" & vbCr & _
        persoonlijkeDir & vbCr & vbCr & "De bestandsnaam is: " & vbCr & _
        Left(strbestnaam, Len(strbestnaam) - 4), vbInformation, "Bevestiging van opslaan"
    End With
End If
 With ObjWrd
    .Visible = True
    .WindowState = wdWindowStateMaximize
    .ScreenRefresh
    .ScreenUpdating = True
    .Browser.Target = wdBrowsePage
    .Activate
   ' DoCmd.Close
 End With
 
AppActivate "Microsoft Word" 'Zorgt ervoor dat het document niet op de taakbalk blijft staan.

Errorhandlerexit:
 Set ObjWrd = Nothing
 Set objWDoc = Nothing
 Set objWrange = Nothing
 Set oCtl = Nothing
 Exit Sub
    
errorhandler:
 If err.Number = 429 Then
   Set ObjWrd = CreateObject("Word.Application")
   Resume Next
 Else
   MSgbox "Error No: " & err.Number & "; Description: " & err.Description
   Resume Errorhandlerexit
   Set ObjWrd = CreateObject("Word.Application")
   Resume Next
 End If
    End Sub
 
Ik heb je code wat moeten aanpassen omdat ik je documenten etc. niet heb, maar in essentie krijg ik 'm prima aan de praat. Overigens raad ik je het gebruik van bladwijzers af; vervang die door DocVariables.
 
Mag ik ook weten wat die aanpassing is geweest?

Verder, wat is het voordeel DocVariables tov van bladwijzers?

Problemen hebben de bladwijzers nog nooit opgeleverd.

Mvg Frans
 
Bladwijzers verdwijnen, DocVariables niet (al kan dat uiteraard wel; het is gewoon een veld tenslotte). Een (gedefinieerde en gevulde) variabele kun je ook hergebruiken in je document. Je zet ze dus op de plek waar je ze hebben wilt (net als een bladwijzer) en vult ze vanuit je procedures. De werking is een stuk betrouwbaarder dan met bladwijzers.
 
Hallo allemaal,

Ik ben ondertussen weer een stap verder.

Het document opent nu wel en blijft dus niet meer op de taakbalk staan.

Deze regel, ObjWrd.Documents.Open (strbestnaam) 'Open het bestand
heb ik veranderd in: Application.FollowHyperlink strbestnaam

Alleen bij sluiten van het document middels het kruis rechtsboven verschijnt nog steeds de melding:

ERROR No: 5; Description: Ongeldige procedure-aanroep of ongeldig argument.
Behalve de foutmelding, welke je gewoon weg kunt klikken, werkt alles goed.

Waarom krijg ik deze foutmelding nog?

Frans

Code:
Private Sub KnopWordlijst_Click()
Dim strbestnaam     As String
Dim persoonlijkeDir As String
Dim ObjWrd          As Word.Application
Dim objWDoc         As Word.Document
Dim objWrange       As Word.Range
Dim oCtl            As Access.Control
Dim WordRunning     As Boolean
Dim fileexist       As Boolean
Dim IANTWOORD As Integer
Dim BasisDirectory As String
Dim strDirectory As String
On Error GoTo errorhandler
BasisDirectory = Application.CurrentProject.path
strDirectory = Left$(CurrentProject.path, InStrRev(CurrentProject.path, "\"))
persoonlijkeDir = strDirectory & "DOSSIERS\" & Me.Persoonssleutel & "\"
strbestnaam = persoonlijkeDir & "Onderzoek" & ".doc"

   If Len(Dir(strbestnaam, vbNormal)) <> 0 Then
          IANTWOORD = MSgbox("LIJST ONDERZOEK BESTAAT REEDS !" _
    & vbCr & vbCr & "OPNIEUW SAMENSTELLEN ?" _
   & vbCr, vbYesNoCancel, "MAAK EEN KEUZE")
Select Case IANTWOORD
Case vbYes
fileexist = False
Case vbNo
fileexist = True
Case vbCancel
Exit Sub
End Select
End If

If Not fFolderBestaat(strDirectory) Then fMaakFolder (strDirectory)
If Not fFolderBestaat(persoonlijkeDir) Then fMaakFolder (persoonlijkeDir)

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

If fileexist = True Then
ObjWrd.Visible = True 'Toon de word-applicatie
ObjWrd.Documents.Open (strbestnaam) 'Open het bestand

[B]‘’ObjWrd.Activate 'Activeer Word met het geopende bestand
‘’Ik heb bovenstaande regel veranderd in de onderstaande
Application.FollowHyperlink strbestnaam[/B]


Else
 Set objWDoc = ObjWrd.Documents.Add(strDirectory & "formulieren\Onderzoek.dot")
    With ObjWrd
        .ScreenUpdating = False
        With objWDoc
        
        Set objWrange = .GoTo(What:=wdGoToBookmark, Name:="A")
        If Format(Forms![KVB]!Datumcontact.Value) = "" Then objWrange.Text = "N.v.T" Else objWrange.Text = Format(Forms![KVB]!Datumcontact.Value, "dddd dd mmmm yyyy") & " om " & Format([Forms]![KVB]!Tijdcontact.Value, "hh:mm") & " uur."
"etc, etc,
            .SaveAs FileName:=strbestnaam, FileFormat:=wdFormatDocument
        End With
        MSgbox "Het bestand is opgeslagen in:" & vbCr & _
        persoonlijkeDir & vbCr & vbCr & "De bestandsnaam is: " & vbCr & _
        Left(strbestnaam, Len(strbestnaam) - 4), vbInformation, "Bevestiging van opslaan"
    End With
End If
 With ObjWrd
    .Visible = True
    .WindowState = wdWindowStateMaximize
    .ScreenRefresh
    .ScreenUpdating = True
    .Browser.Target = wdBrowsePage
    .Activate
   ' DoCmd.Close
 End With
 
AppActivate "Microsoft Word" 'Zorgt ervoor dat het document niet op de taakbalk blijft staan.

Errorhandlerexit:
 Set ObjWrd = Nothing
 Set objWDoc = Nothing
 Set objWrange = Nothing
 Set oCtl = Nothing
 Exit Sub
    
errorhandler:
 If err.Number = 429 Then
   Set ObjWrd = CreateObject("Word.Application")
   Resume Next
 Else
   MSgbox "Error No: " & err.Number & "; Description: " & err.Description
   Resume Errorhandlerexit
   Set ObjWrd = CreateObject("Word.Application")
   Resume Next
 End If
    End Sub
 
Ik vrees dat je geen enkele regel van deze code begrijpt.
Zie dan af van het gebruik van VBA.
 
snb,

Het probleem van de Error heb ik ondertussen ook verholpen.

Ik heb inderdaad weinig of geen verstand van VBA.

Maar voor een helpende hand hebben ze daar toch een forum voor uit gevonden, zoals Helpmij en het Officeforum?
Zie ik dit verkeerd en moet je een bepaalde kennis hebben?

Verder werk ik al sedert 2004 met deze code en heeft altijd voor 100% zijn werk gedaan.

Mvg, Frans
 
Maar voor een helpende hand hebben ze daar toch een forum voor uit gevonden, zoals Helpmij en het Officeforum? Zie ik dit verkeerd en moet je een bepaalde kennis hebben?
Een forum is géén cursus; het is niet opgezet om mensen iets te leren. Daar zijn cursussen voor. Je stelt een vraag op een forum voor een probleem waar je niet uitkomt. Daarbij gaan wij er op onze beurt weer van uit dat een vragensteller het probleem begrijpt. En dus kennis heeft van de onderliggende structuur van het probleem. Het is onmogelijk dat iemand een VBA vraag stelt en de eigen vraag kan snappen als die persoon geen kennis heeft van VBA. Vanuit een basiskennis, waarbij je je eigen vraag snapt, zul je ook makkelijker het antwoord snappen. En daar dus iets van leren.

We zien (te) vaak dat mensen her en der wat code en macro’s vandaan plukken, nog net snappen waar ze die moeten neerzetten, en er vervolgens achter komen dat de macro niet werkt. En dan komen ze dus op een forum terecht. Kortom: als je met VBA wilt werken, zul je er op zijn minst zelf tijd en moeite in moeten steken om de materie eigen te maken.

Jij hebt net een paar schaatsen gekocht, kan een rondje achter een stoel schaatsen en wil nu meedoen met de Olympische Spelen. En vind het dan ook nog vreemd dat mensen als Sven Kramer je achteruit schaatsend alle hoeken van de ijsbaan laten zien :).
 
Laat ik het toevallig volledig (> 100%) met @Octa eens zijn.....
 
@OctaFish, een mooie verwoording voor het verschil tussen helpmij.nl en maakvoormij.nl. :thumb:
 
Beste forumleden,

Ik heb door zelfstudie en door het lezen (kopen) van boeken mij tot op een bepaald niveau Word, Excel en Access eigen gemaakt. Cursussen volgen is niet evident : ofwel zijn ze ontzettend duur omdat ze niet in het circuit van volwassenenonderwijs georganiseerd worden ofwel worden ze niet geprogrammeerd door de lescentra omdat er onvoldoende belangstelling voor is. Waar moet je dan de mosterd halen?
 
Laatst bewerkt door een moderator:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan