Tempvars probleem in wordmerge functie

Status
Niet open voor verdere reacties.

JohanRVT

Gebruiker
Lid geworden
2 mrt 2011
Berichten
553
Beste,
ik probeer in een functie om vanuit Access een Word document te openen. Daarbij wordt de titel van het document meegegeven na aanklikken van een Word document uit een lijst in een vorig formulier en dat de titel dus in een tempvars "PDRisicodocFile" wordt gestopt die je dus elders normaal kunt gebruiken.
Zet ik in de rode regel Optional strOutPutDoc As String = " & [TempVars]![PDRisicodocFile]", _ tussen de aanhalingstekens een vaste tekst dan verschijnt die netjes in de titel van het Word document als dit wordt geopend maar zoals het nu staat verschijnt er dus & [TempVars]![PDRisicodocFile] in de titel en ik zou de PDRisicodocFile waarde zelf natuurlijk willen zien verschijnen. Tot nu toe heb ik al verschillende variaties geprobeerd maar altijd wel ergens fout. Iemand voorstel voor de juiste formulering?

Code:
Public Function MergeSingleWord2(strform As String, _
                                strDir As String, _
                                [COLOR="#FF0000"]Optional strOutPutDoc As String = " & [TempVars]![PDRisicodocFile]", _[/COLOR]
                                Optional bolFullPath As Boolean = False, _
                                Optional bolShowDelete As Boolean = True)

   Dim frmF             As Form
   Dim strDirPath       As String      ' full path name to working dir
   
   Set frmF = Screen.ActiveForm
   frmF.Refresh
   
   strDirPath = DirToPath(strDir, bolFullPath)
      
   If MakeMergeText(frmF, strMergeDataFile) Then
      DoCmd.OpenForm "GuiWordTemplate_DOC", , , , , acDialog, _
                     strDirPath & "~" & strOutPutDoc & "~" & bolShowDelete
      MergeSingleWord2 = strTemplate
   End If

End Function
 
Probeer DIT eens:
Code:
Optional strOutPutDoc As String = " "& [TempVars]![PDRisicodocFile], _
 
Die oplossing gaat (uiteraard) niet werken; je kunt namelijk geen variabelen gebruiken in argumenten. Daarom werkt je vaste tekst wél, en de variabele niet. Is ook logisch, omdat je de variabele in de aanroep moet gebruiken. Dus iets als:
Code:
 MergeSingleWord2 Me.Name, strDir, TempVars!PDRisicodocFile.Value

Je geeft dus altijd de feitelijke waarden mee als parameter.
 
Michel,
het aanroepen van de functie gebeurt door middel van klikken op een knop "CmdWordRisico" op een vorige formulierpagina. Hier staat de volgende code onder.

Code:
Private Sub CmdWordRisico_Click()
On Error GoTo Err_CmdWordRisico_Click
    Dim Aantal
    Dim voorwaarde
    Dim Cancel As Boolean
    Dim stdocname As String
    Dim stlinkcriteria As String
    Dim KzlBewoner As String

'check of er een bewoner is geselecteerd:
    If Me.BNaam.Value = "" Then
        MsgBox "Selecteer eerst een bewoner in het vorige formulier", vbCritical + vbOKOnly, "Keuze gevraagd"
         Exit Sub
    End If
    [COLOR="#FF0000"]WordCode.MergeSingleWord2 "GuiWordTemplate_DOC", "Bewonersdossier\Formulieren"[/COLOR]
Exit_CmdWordRisico_Click:
     Exit Sub
Err_CmdWordRisico_Click:
     Select Case Err.Number
            Case 9999
                Resume Next
            Case 999
                Resume Exit_CmdWordRisico_Click
            Case Else
            Call LogError(Err.Number, Err.Description, "CmdWordRisico_Click()")
                Resume Exit_CmdWordRisico_Click
     End Select
End Sub

GuiWordTemplate_DOC is het formulier dat geopend wordt en waar de gebruiker dus in de lijst kan kiezen welk gekoppeld Word document hij opent. Daar wordt dan pas de PDRisicodocFile Tempvars gevuld door aanklikken van het juiste Word document uit de lijst. En het is dus in dat formulier dat o.a. de knop "Ok - Open document staat" met de eerder geposte code. M.a.w. ik kan de tempvars niet meegeven bij het aanroepen van de functie.

Bewonersdossier\Formulieren is de (sub)directory waar de formulieren staan.

Nog even meegeven dat de Merge functie eigenlijk iets is die vanuit de bewonertabel een merge888.txt op de PC zet die dan als gekoppelde SQL data gebruikt wordt door de Word documenten als samenvoegvelden zoals de normale verzendlijsten



Even een totaal uitgeklede DB bijgevoegd.
 

Bijlagen

Volgens mij maak je het wel héél (te, in mijn optiek) ingewikkeld. Om te beginnen: Word kent geen TempVars, dus het heeft geen zin om vanuit een geopend Word document (waarbij Word actief is, neem ik aan) een TempVars uit te lezen. Dat kan Word namelijk niet. Als je vanuit Access gegevens over wilt halen naar Word, dan zul je dat dus vanuit Access moeten doen. En dat kan alleen via een Word sessie die je opent. Maar dat doe je zo te zien (nog) niet.

Ik zou zelf, als ik dus variabele gegevens vanuit Access in Word wil zetten, daarvoor in Word DocVariables aanmaken/gebruiken. Die kan je vanuit je Word sessie in Access namelijk wél vullen.
 
Ik heb vandaag (eindelijk) kunnen kijken naar je document, en aan de ene kant zie ik dat je wel degelijk een Word sessie opent, maar, aan de andere kant, m.i. een veel te ingewikkelde structuur gebruikt. Ik ben zelf niet vies van ingewikkelde constructies (daar heb ik mijn carrière jaren lang draaiende op kunnen houden :)) maar het kostte mij een hele avond om iets te snappen van de jouwe. En dat is als zodanig geen goed teken :d.

Ik zal kijken of ik er morgen iets werkends van kan maken. Al snap ik dus de bedoeling van die TempVar nog steeds niet…
 
Die tempvar was maar een ideetje, bedoeling is gewoon om de titel van het Word document op een of andere manier op te halen uit de (variabele) lijst na aanklikken van het juiste.
Mag dus gerust anders en simpeler.
 
Ik zal er vanmiddag/vanavond even naar kijken. Zelf zou ik, vanuit Word, dus ofwel met DocVariables werken, of met CustomDocProperties (de laatste naam is uit het hoofd, dus zal wel niet helemaal correct zijn). Met beiden kun je een variabel gegeven vastleggen, een beetje vergelijkbaar dus met TempVars. Al kun je de Word varianten ook vasthouden in het document, en dat kan met TempVars niet.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan