Toon posts:

[Access]Record Exporteren Naar Word?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Mensen,

Ik ben bezig met een access project, waarbij gegevens in een record ingevoert word. Deze gegevens gaan vervolgens naar een word bestand.
Ik heb nu al wel een knop, dat alles in de tabel naar een word sjabloon gaat, en word ingevult. Nu wil ik ook een knop hebben, om de waarden van 1 enkel record te exporteren op een soortgelijke manier naar een word document.
Alleen heb ik geen idee hoe ik dit kan maken, kan iemand mij hier mischien bij helpen?
Ik zou even mijn code bijvoegen die ik gebruik voor de complete lijst.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Option Compare Database   ' De databasevolgorde gebruiken voor het vergelijken van tekenreeksen.
Option Explicit  ' Variabelen moeten worden gedeclareerd voor gebruik.

' Acces-Word Merge Code.
Private Const conTemplate As String = "<naam sjabloon>.dot"
Private Const conQuery As String = "<naam query>"

Public Sub MailMerge()
    Dim strPath As String
    Dim strDataSource As String
    
    Dim doc As Word.Document
    Dim wrdApp As Word.Application
        
    On Error GoTo HandleErrors
    ' Verwijder het RTF bestand, als deze al bestaat.
    strPath = FixPath(CurrentProject.Path)
    strDataSource = strPath & conQuery & ".doc"
    Kill strDataSource
    
    ' Exporteer data naar het rtf formaat.
    DoCmd.OutputTo acOutputQuery, conQuery, _
     acFormatRTF, strDataSource, False

    ' Start Word gebruikmakend van de ingestelde template.
    Set wrdApp = New Word.Application
    Set doc = wrdApp.Documents.Add(strPath & conTemplate)
        
    ' Merge de gegevens naar een nieuw document.
    With doc.MailMerge
        .OpenDataSource Name:=strDataSource
        .Destination = wdSendToNewDocument
    ' Blanke regels weghalen?
        .SuppressBlankLines = True
        With .DataSource
        .FirstRecord = wdDefaultFirstRecord
        .LastRecord = wdDefaultLastRecord
        End With
        If .State = wdMainAndDataSource Then
            .Execute
        End If
    End With
    
    ' Geef het document weer, aan te passen.
    wrdApp.Visible = True
    
ExitHere:
    Set doc = Nothing
    Set wrdApp = Nothing
    Exit Sub
    
HandleErrors:
    Select Case Err.Number
        Case 53         ' Bestand niet gevonden.
            Resume Next
        Case Else
            MsgBox Err.Number & ": " & Err.Description
            Resume ExitHere
    End Select
End Sub

' Wat instellingen met betrekking tot het vinden van het RTF-Bestand.
Private Function FixPath(strPath As String) As String
    If Right(strPath, 1) = "\" Then
        FixPath = strPath
    Else
        FixPath = strPath & "\"
    End If
End Function

'. Laat de juiste knop het mergeprocess beginnen.
Private Sub Knop<knop#>_Click()
Call MailMerge
End Sub


Alvast bedankt.

  • Boss
  • Registratie: September 1999
  • Laatst online: 22:38

Boss

+1 Overgewaardeerd

Hm, bovenstaande code ziet eruit alsof het gemaakt is door iemand die weet waar hij mee bezig is, maar toch lukt het je niet om dit (vrij eenvoudige) probleem op te lossen? Is het wel je eigen code?

Wat het makkelijkste is (denk ik) is de query aanpassen waarin de gegevens staan, zodanig dat alleen het gewenste record eruit komt.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
Het is wel mijn eigen code, de code zit niet zo ingewikkeld in elkaar.
Ik zou niet weten hoe dit is op te lossen via een query? Hmm, ok.. Mijn VB kennis ligt dan ook hoger als mijn Access kennis, maar ik zou echt niet weten hoe ik iets dergelijks voor een enkele recordset kan maken. Ik heb nu op mijn switchboard een knop die deze code uitvoert, er zit uiteraard een query verwerkt in deze code en hij spugt netjes de complete lijst met alles in de tabel er uit. Nu wil ik in het scherm waar ik de gegevens kan aanpassen en toevoegen ook een knop hebben, die eigenlijk een soortzelfde merge uitvoert, alleen dan enkel van de record wat ik open heb staan om te bewerken dan.

p.s.: Ik denk dat je mij niet goed begrijpt, het idee is vrij simpel hier achter, maar mijn probleem, hoe zoiets te maken.. Dat zit stukken moeijlijker in elkaar ;)

[ Voor 12% gewijzigd door Verwijderd op 02-02-2006 16:29 ]


  • Boss
  • Registratie: September 1999
  • Laatst online: 22:38

Boss

+1 Overgewaardeerd

Ok, stel dat de query nu 'qryExport' heet en bevat iets van "SELECT * FROM tblGegevens". Via je code exporteer je die query nu naar een rtf bestand (waarom eigenlijk rtf als databestand en niet 'gewoon' csv of zoiets?).

Als je nu een tweede query maakt qryExport2. Via een knop kan je daar met de volgende code de sql van aanpassen: CurrentDb.QueryDefs("qryExport2").SQL = "SELECT * FROM tblGegevens WHERE GegevensID = "& GewensteID & ";"

Daarna met de eerder gebruikte DoCmd.OutputTo die query exporteren en de rest van de code hetzelfde laten.

Dan heb je toch het gewenste effect?

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.