25. september 2000 - 13:13Der er
11 kommentarer og 1 løsning
Rapport baseret på Accessforespørgsel
Jeg ved det er muligt at \"udgive\" en rapport baseret på data fra en DB i Word vha. evt. brevfletning. Men er det muligt at fra Access at overføre data fra en vist formular/rapport til et forberedt Word dokument ? Dvs at der vil hovedsaligt være tale om en parameteroverførsel til diverse indsatte felter i Worddokumentet. Point vil blive givet til den første med en præcis,funktionel løsning!
Jeg vil prøve at give en løsning til spørgsmålet ved et eksempel.
Min løsning bygger på, at du i forvejen opretter en template/skabelon, der indeholder de faste elementer.
Alle de steder du ønsker at Access skal indesætte oplysninger, indsætter du et bogmærke. Dette gøres ved, at du placerer markøren hvor du ønsker bogmærket, og vælger \"bogmærke\" fra menuen \"indsæt\". Giv disse bogmærker sigende navne.
Denne skabelon gemmer du (selvfølgelig) som en .dot fil, et sted du kan huske.
Herefter kan du nu fra Access refere til disse bogmærker.
Her følger en punktvis beskrivelse af hvordan du laver et lille test projekt:
1. Opret en ny skabelon i word, hvori du indsætter 2 bogmærker. Kald dem hhv. bmkNavn og bmkTekst.
2. Gem denne skabelon i samme bibliotek, som du opretter Access Databasen i.
3. Opret en Access Database, i biblioteket fra (2)
4. Opret en Formular (frmTest). På formularen opretter du 2 tekstbokse (txtNavn), (txtTekst). Samt en kommandoknap (btOK).
5. I knappens OnClick event, tilføjer du nedenstående kode:
--- Kode start ---
Private Sub btOK_Click()
Dim objWord As Word.Application
Set objWord = New Word.Application
With objWord .Documents.Add _ Application.CurrentProject.Path & \"\\Test.dot\" .Visible = True End With
With objWord.ActiveDocument.Bookmarks .Item(\"bmkNavn\").Range.Text = txtNavn .Item(\"bmkTekst\").Range.Text = txtTekst End With
End Sub
--- Kode slut ---
Du skal desuden indsætte en reference til Microsoft Word 9.0 object library (Tools - References)
6. Test formularen.
Lidt forklaring til koden:
Linjen objWord.Documents.Add Appli...
Her fortæller Access Word hvor den skal finde skabelonen den skal starte op med. Application.CurrentProject.Path returnerer stien til Access, derfor skulle du gemme skabelonen i samme bibliotek som Access basen. Hvis du f.eks. havde gemt skabelonen som \"C:\\Test.dot\", kunne du i linjen skrive:
Linjen objWord.Documents.Add \"c:\\test.dot\".
Linjen: .Item(\"bmkNavn\").Range.Text = txtNavn er næsten selvforklarende, du referer til bogmærkenavnet, og sætter det lig med den værdi du ønsker overført.
Håber at ovenstående er svar på dit spørgsmål, ellers skriv igen hvis du ønsker noget uddybet.
Ser interesant ud ! Har lige kørt min test og er ganske imponeret af forslaget ! Jeg har dog behov for mindst et par dage til lige at undersøge for begrænsninger ! Ellers ser det ud til at du har ramt plet \'LKP\' ! :)
Du kan selvfølgelig skifte txtNavn ud med en anden variabel.
Hvis du ikke er sikker på, om du får en numerisk værdi at formattere, kan du selv lave en funktion der sørger for, kun at formattere såfremt variablen er nummerisk, og ellers blot levere inputtet tilbage.
Et eksempel på en sådan funktion kunne være:
--- Kode start ---
Public Function FormatString(varText As Variant) As Variant
If IsNumeric(varText) Then varText = Format(varText, \"0.00\") End If
FormatString = varText
End Function
--- Kode slut ---
Jeg er som sagt ikke sikker på, om det er det du mener, hvis ikke, spørg igen (eller opret et nyt spørgsmål ;-) )
Beklager, ligger syg :( Hvis d r fordi du mangler point, så sig til! Jeg kan godt love dig ihvertfald 50-75 point, jeg vil bare gerne have lidt at lokke med, skulle d ske jeg får brug for uddybelse :)
>LKP Har du en mail jeg kan fange dig på ? Jeg har efter møde med bestyrelsen endelig fået stoppet udviklingsarbejdet og sat gang i fejlsøgningen. Af samme grund regner jeg ikke med at benytte ovenstående fuldt ud foreløbig. Derfor håber jeg lidt at du kan nås via email, for så vil jeg lukke spørgsmålet nu.
For Fedt ! :) Jeg arbejder som regel med en uge af gangen som tidsramme, derfor er det tit, at der sker en (væsentlig) ompriotering af arbejdsopgaverne ! I det her tilfælde er det blevet min opgave at \"rense\" vores DB for fejl *FAINT* Såøh .. Denne tidsramme håber jeg på kan blive i måneder :) Men jeg vender tilbage når jeg går igang med at undersøge dataoverførsel, Officeapplikationer imellem.
Cheers, Zim
Synes godt om
Ny brugerNybegynder
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.