Avatar billede bukse Nybegynder
18. maj 2001 - 16:53 Der er 12 kommentarer og
1 løsning

Brevfletning med access

Jeg har en formular hvor jeg kan bladre i de enkelte poster.
Når jeg er kommet til de (den) post jeg ønsker, vil jeg gerne kunne trykke på en knap som så uskriver de oplysninger i et word dokument.
Ex. et standardbrev med et brevhoved med: navn, adresse mv.
Jeg vil kun kunne skrive til den post jeg har fremme i min formular.
Avatar billede bukse Nybegynder
18. maj 2001 - 16:55 #1
fortsat....
Altså flettes med worddokumentet og så automatisk udskrives
Avatar billede mugs Novice
18. maj 2001 - 21:19 #2
Hej
Det vil lette meget, hvis du i skriver om det er Access 97 eller 2000.

Det nemmeste du kan gøre er at åbne dit standardbrev i Word, derefter søge efter den post, du vil udskrive. Når den er fundet går du i Filer og Udskriv. I boksen Sideområde afkrydser du feltet Aktuel side. Du vil herefter kun få udskrevet den ene post. Det forudsætter naturligvis, at du har lavet selve brevfletningen.

Men jeg tror ikke det er det du mener. Du vil stå i Access, og ved hjælp af en VBA-kode indsætte kriterier i den forespørgsel, der udvælger poster til Word. Og så er sagen straks en anden.

Men kan du nærmere definere hvad du vil ?

Mvh / mugs
Avatar billede bukse Nybegynder
18. maj 2001 - 21:26 #3
Hej Mugs
Ja rigtig gættet det er det sidste jeg gerne vil kunne gøre. Da jeg bruger basen til noget kursist administration. Men har ikke meget forstand på VBA, jeg er først lige begyndt at \"lære\" det (selv læring)
Jeg bruger Access 200
Vh bukse
Avatar billede mugs Novice
18. maj 2001 - 22:33 #4
Hej igen

Jeg kender intet til Access 2000. Men jeg ved dog, at en 97-procedüre kan konverteres til 2000 og omvendt.

Jeg vil dog arbejde videre på en 97-løsning, idet jeg også gerne vil have den mulighed du skitserer. Men du skal nok sætte din lid til, at en klogere mand end mig kommer forbi.

Jeg havde nogenlunde det samme problem for et par år siden: Tekstfilen var altid den samme, men dog med forskellige data som f.eks. CPRNR, adresse m.v. Det løste jeg ved at hente tekstfilen ind som en rapport. Derefter lave et afkrydsningsfelt i tabellen, hente det ind i forespørgslen med kriteriet True. Derefter kan jeg i formularen afkrydse alle poster der skal udskrives i rapporten. Nok ikke særlig elegant - men det virker dog.

Men iøvrigt - så velkommen til klubben af \"selvlærere\". Det er en lang men også spændende vej.


Mvh / mugs
18. maj 2001 - 23:11 #5
Hej Bukse,

Jeg har noget kode her, som åbner et nyt dokument baseret på en given Word-skabelon. Herefter indsætter den de relevante felter i nogle bogmærker, som er defineret i skabelonen (her er bare valgt Navn og Adresse).
Koden ligger på en knap, som her kaldes \"cmdBrevflet\".
NB: Du skal (fra menuen Tools->References) sætte en reference til Microsoft Word for at det virker!

Private Sub cmdBrevflet_Click()
    Dim objWord As New Word.Application
    Dim WordDoc As New Word.Document
    Set WordDoc = objWord.Documents.Add(\"C:\\Sti til skabelon.dot\")
    Call InsertAtBookmark(WordDoc, \"navn\", Me!Navn)
    call InsertAtBookmark(WordDoc, \"Adresse\", Me!Adresse)
    objWord.Visible = True
    DoCmd.Hourglass False
End Sub

Endvidere skal du lige have denne funktion, som indsætter tekst i et bogmærke (så du er fri for at indtaste det for hvert bogmærke).

Function InsertAtBookmark(objWordDoc As Word.Document, _
strBookmark As String, strText As String) As Boolean
    With objWordDoc.Bookmarks
        If .Exists(strBookmark) Then
            .Item(strBookmark).Range.Text = strText
            InsertAtBookmark = True
        End If
    End With
End Function

mvh Thomas
Avatar billede bukse Nybegynder
19. maj 2001 - 08:46 #6
Hej Thomas
Du har før hjulpet mig med succes, da måtte du også skære det ud i pap.
gider du forklare mig skridt for skridt hvad jeg skal gøre og hvor.
Vh
Bukse
19. maj 2001 - 21:51 #7
Hej Bukse,

Først skal du lave din Word-skabelon. Dvs, at du laver et Word-dokument som ser ud som du vil have det til. Herefter indsætter du de bogmærker, som du ønsker (menuen Indsæt->Bogmærke) - f.eks. Navn eller Adresse. Der hvor markøren står, vil der blive indsat en tekst.
Gem dokumentet som en .doc- eller .dot-fil (.dok er på mange måder bedst selvom det burde være en .dot)

På din formular laver du så en knap. På denne højreklikker du og vælger \"Generer hændelsesprocedure\"->\"Kode editor\"

Herefter indsætter du denne kode der hvor markøren står:

    Dim objWord As New Word.Application
    Dim WordDoc As New Word.Document
    Set WordDoc = objWord.Documents.Add(\"C:\\Sti til skabelon.dot\")
    Call InsertAtBookmark(WordDoc, \"navn\", Me!Navn)
    call InsertAtBookmark(WordDoc, \"Adresse\", Me!Adresse)
    objWord.Visible = True
    DoCmd.Hourglass False

De 2 linier, som starter med Call skal tilpasses, så de refererer til de bogmærker, som du lige har lavet i dokumentet. Dvs, hvis du har lavet 10 bogmærker, skal du have 10 linier som starter med Call InserAtBookmark....

Herefter (stadig fra kode-editoren) åbner du menuen Tools->references og på den fremkomne liste finder du \"Microsoft Word 9.0 Object Library\" (eller lignende) og krydser den af.

Til sidst indsætter du funktionen under End Sub-linien eller du laver et nyt modul, hvor du kan indsætte det (det sidste er det bedste, men er ikke afgørende):
Public Function InsertAtBookmark(objWordDoc As Word.Document, _
strBookmark As String, strText As String) As Boolean
    With objWordDoc.Bookmarks
        If .Exists(strBookmark) Then
            .Item(strBookmark).Range.Text = strText
            InsertAtBookmark = True
        End If
    End With
End Function

Jeg håber, at det hjælper?

/Thomas
Avatar billede bukse Nybegynder
19. maj 2001 - 23:05 #8
Tusind mange tak Thomas

Men kan jeg få udskrevet dokumentet uden at word starter, jeg mener hvis jeg fx skal skrive 5 poster ud er det lidt besværligt at skulle lukke word hvergang
Vh
Bukse
19. maj 2001 - 23:56 #9
Hmm, du kan udskrive og lukke Word fra Access også.
Så vidt jeg husker, så skal du skrive:

WordDoc.Printout
objWord.Quit

således at koden på din knap hedder:
    Dim objWord As New Word.Application
    Dim WordDoc As New Word.Document
    Set WordDoc = objWord.Documents.Add(\"C:\\Sti til skabelon.dot\")
    Call InsertAtBookmark(WordDoc, \"navn\", Me!Navn)
    call InsertAtBookmark(WordDoc, \"Adresse\", Me!Adresse)
    objWord.Visible = True
    WordDoc.Printout
    objWord.Quit

mvh Thomas
Avatar billede bukse Nybegynder
20. maj 2001 - 08:45 #10
Desværre får jeg meldingen at word er ved at udskrive og kan derfor ikke lukkes, ellers slettes udskriftsjobbet,

Vh Bukse
20. maj 2001 - 22:12 #11
Ja, det er sgu nok rigtigt :o(

Prøv dette:
    Dim objWord As New Word.Application
    Dim WordDoc As New Word.Document
    On Error goto Err_Word
    Set WordDoc = objWord.Documents.Add(\"C:\\Sti til skabelon.dot\")
    Call InsertAtBookmark(WordDoc, \"navn\", Me!Navn)
    call InsertAtBookmark(WordDoc, \"Adresse\", Me!Adresse)
    objWord.Visible = True
    WordDoc.Printout
Prøv_Igen:
    objWord.Quit
    Exit sub
Err_Word:
    Resume Prøv_Igen

Den er dog lidt \"farlig\", da den forsøger at lukke word uanset hvilken fejl der måtte opstå - men for at lave fejlhåndteringen mere korrekt, skal jeg vide hvilken fejlkode den komme med. Kan du se det?

/Thomas
Avatar billede bukse Nybegynder
21. maj 2001 - 05:05 #12
\"Word er i gang med at udskrive. Hvis du afslutter Word nu, annulleres alle udskriftsjob. Vil du alligevel afslutte Word?\" \"Ja el Nej\"

Når jeg har svaret nej og fået en udskrift skal jeg selv afslutte Word, hvorved jeg får spørgsmålet om jeg ønsker at gemme dokumentet, og det ønsker jeg ikke.

Vh Bukse
21. maj 2001 - 09:25 #13
Hej igen,

Normale mennesker sover kl 5 om morgenen. :o)

Jeg sidder ikke lige ved en maskine, hvor jeg kan afprøve det. Men på din objWord.Quit bør der være mulighed for at angive nogle flere argumenter efter, således at du kan styre om den skal automatisk gemme eller hvad den skal.
Prøv at leg lidt med det.

/Thomas
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester