15. oktober 2002 - 08:58Der er
39 kommentarer og 1 løsning
brugervenlig udtræk fra access ind i Word
Jed skal i word97 indsætte data fra en (hjemmelavet) adressetabel i access97 (købte og betalte programmer - derfor så gamle). Jeg har prøvet at lave det med brevflette funktionen i word, men da jeg kun skal bruge een adresse ved hver fletning + at den der skal bruge funktionen er total edb ukyndig er dette ikke godt nok. Spørgsmålet er: Hvilken metode skal jeg benytte for at lave et brugervenligt opslag fra mit word dokument ind i access databasen, således at jeg kan vælge en adresse og returnere den og indsætte den i mit word dokument?
Jeg er ikke helt fortrolig med MS produkterne og hvad man kan med dem, men jeg arbejder med edb til hverdag. Så med gode anvisninger vil jeg mene at jeg selv kan lave noget fornuftigt, blot jeg får vist vejen.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Jeg må indrømme, at jeg ikke har prøvet det - selvom jeg tit har tænkt på det. Jeg har dog fundet en hjemmeside hos MS, der måske kan hjælpe dig lidt på vej.
Du skal bruge brevflette i Word. Selv om du har flere poster i Access, er det ikke noget problem at lave en parameter i Access, der kun fletter en udvalgt post. I din Forespørgsel i Access sætter du firekantede paranteser i nøglefeltets kriterie-linie således: [] Herefter vil forespørgslen poppe op med en inputbox, der beder dig indtaste en værdi, der svarer til den ønskede post. Denne metode betyder naturligvis, at brugeren skal kende denne værdi i forvejen. du vil få inputboxen uanset om forespørgslen køres fra Access eller fra Word.
En anden metode, der måske er mere brugervenlig, hvis brugeren ikke kender den unikke værdi for den ønskede adresse, er så at sige den omvendte måde:
Du åbner Access, og finder den ønskede adresse. Derefter trykker du på en kommandoknap, og straks vil Access åbne Word, og overføre formularens data til Word. Når brugeren er færdig med Word, lukkes programmet, og du er tilbage i Word. Denne sidste metode kræver lidt mere programmering i Access.
Jeg skal gerne lave et par simple eksempler. Blot svar her og læg din e-mail.
mugs Det lyder som om det at starte word fra fra access og overføre fundne data til word er den rette metode.
Jeg har defineret en kontolknap i access der starter word (nemt med guiden) men hvordan jeg får overført data fra den post jeg står på til word, får åbnet et predefineret dokument (altid det samme), får sat data ind på predefinerede pladser og gemt dokumentet i et nyt navn - se det er der jeg er på herrens mark ( jeg var på access kursus i 1994 ca. og har aldrig brugt det siden såååå). Kode for kontrolknappen (genereret med guiden):
Private Sub fakturaknap_Click() On Error GoTo Err_fakturaknap_Click
Dim oApp As Object
Set oApp = CreateObject("Word.Application") oApp.Visible = True
Du kan åbne formularen i designvisning > trykke på kommandoknappen > tryllestav og du kommer ind i kodemodulet. Her er indsat flg. kode:
Dim objword As New Word.Application Dim WordDoc As New Word.Document Set WordDoc = objword.Documents.Add("C:\Access Word\Word.doc") Call InsertAtBookmark(WordDoc, "fornavn", Me!fornavn) Call InsertAtBookmark(WordDoc, "efternavn", Me!efternavn) Call InsertAtBookmark(WordDoc, "gade", Me!gade) Call InsertAtBookmark(WordDoc, "postnr", Me!postnr) Call InsertAtBookmark(WordDoc, "by", Me!by) objword.Visible = True DoCmd.Hourglass False
koden klader procedüren "InsertAtBookmark". "fornavn" svarer til navnet på bogmærket i Word, og Me!fornavn er Access datafelt, der indeholder data. InsertAtBookmark ser sådan ud:
With objWordDoc.Bookmarks If .Exists(strBookmark) Then .Item(strBookmark).Range.Text = strText InsertAtBookmark = True End If End With
Men det nemmeste er nok, at åbne Access - formularen og se hvordan. Og andet er ikke nødvendigt.
mugs Du er cool. Det er 100% hvad jeg har brug for. Min sidste kommentar krydsede dine mails, derfor det lidt "uvidende" indhold. Jeg havde så travlt med at nyde din kode at jeg ikke fik "dementeret" mit sidste indlæg. Du får lige 170 point ekstra.
Unable to deliver message to the following recipients, because the message was forwarded more than the maximum allowed times. This could indicate a mail loop.
Du skriver at "..din Forespørgsel i Access sætter du firekantede paranteser i nøglefeltets kriterie-linie således: [].."
Er det muligt, at popup vinduet præsenterer brugeren for en kombobox, hvorfra der så skal gøres et valg (i stedet for at skrive en værdi, hvilket kræver at brugeren på forhånd kender de forskellige værdier)?
Umiddelbart mener jeg ikke du kan gøre det med en combo. Du skal i hvert fald have en tabel hvori du har din combo. Men jeg har aldrig prøvet.
Jeg vil som en anden bruger foreslå en formular, hvoi du sætter din combo, og i den forespørgsel der skal levere data til Word sætte en reference til comboen:
Hej mugs tak for databasen, jeg har bare et spørgsmål, vedr opsætningen. Jeg kan se at alle opskrifter har deres eget word dokument, hvordan opsætter jeg vba koden til kun det samme dokument, så det ikke er word brev 0, 1, 2, 3 osv. ' Det er lidt besværligt at oprette 2000 word breve, og fylder en del :-)
Private Sub Kommandoknap28_Click() On Error GoTo err_open Dim docname As String Dim objword As Word.Application Dim objdoc As Word.Document Const dir As String = "C:\forret\" Const ext As String = ".doc" docname = dir & Me.id & ext On Error Resume Next Set objword = GetObject(, "Word.Application") Err.Clear On Error GoTo err_open If objword Is Nothing Then Set objword = GetObject("", "Word.Application") End If objword.Visible = True AppActivate "Microsoft Word" objword.Documents.Open docname objword.PrintOut objword.Visible = False MsgBox "Forret er sendt til printer." & vbNewLine & "Vent på udskrift." Exit Sub err_open: MsgBox "fejlkode: " & Err.Number End Sub
Hver opskrift har sin egen opskrift, idet opskrifterne er forskellige. Access henter det worddokument der matcher med formularens opskriftnummer. det sker på disse linier:
Const dir As String = "C:\forret\" Const ext As String = ".doc" docname = dir & Me.id & ext
Hvis du hele tiden vil hente det samme dokument, kan du se den fulde kode, hvis du prøver at oprette en opskrift i Access. Når du har udfyldt formularen trykker du på knappen "Skriv opskrift" (eller noget lignende), og Access vil så hente den word-skabelon (Opskrift.dot) hvori bogmærkerne er indsat.
Jubii... så fandt jeg ud af det. læste ikke din besked rigtigt. Men koden var jo lige foran næsen :-)
Tak for hjælpen!!!
-----
Private Sub Kommandoknap21_Click() Dim objword As New Word.Application Dim WordDoc As New Word.Document Set WordDoc = objword.Documents.Add("C:\forret\brev1.doc") Call InsertAtBookmark(WordDoc, "fornavn", Me!fornavn) Call InsertAtBookmark(WordDoc, "efternavn", Me!efternavn) Call InsertAtBookmark(WordDoc, "vej", Me!vej) Call InsertAtBookmark(WordDoc, "husnr", Me!husnr) Call InsertAtBookmark(WordDoc, "bogstav", Me!bogstav) objword.Visible = True DoCmd.Hourglass False End Sub 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
Private Sub Nr_Click() Dim objword As New Word.Application Dim WordDoc As New Word.Document Set WordDoc = objword.Documents.Add("D:\forret\brev1.doc") End Sub
Function InsertAtBookmark(objWordDoc As Word.Document, strBookmark As String, strText As String) As Boolean If nor IsNull(Me.FELTNAVN) Then With objWordDoc.Bookmarks If .Exists(strBookmark) Then .Item(strBookmark).Range.Text = strText InsertAtBookmark = True End If End With Else: exit function End Function
Når nu skal det så effektiviseres lidt mere :-) - hvordan brevfletter jeg x antal personer ind i brevet, så jeg får x antal breve udskrevet.
jeg har lavet følgende sql, der opdaterer et par felter, hvordan skriver jeg kun de wordbreve der findes ved en select ?
UPDATE postdk SET postdk.Udsendtaf = [Udsendt af ], postdk.udsenddato = [ dato for udsendelse dd-mm-åååå] WHERE (((postdk.Udsendtaf) Is Null) AND ((postdk.Id) Between [ skriv START ID tal] And [skriv SLUT ID tal]));
- eller evt. udskrive breve til alle de kunner der er på skærmen.
ved brug af denne
Private Sub Kommandoknap21_Click() Dim objword As New Word.Application Dim WordDoc As New Word.Document Set WordDoc = objword.Documents.Add("C:\forret\brev1.doc") Call InsertAtBookmark(WordDoc, "fornavn", Me!fornavn) Call InsertAtBookmark(WordDoc, "efternavn", Me!efternavn) Call InsertAtBookmark(WordDoc, "vej", Me!vej) Call InsertAtBookmark(WordDoc, "husnr", Me!husnr) Call InsertAtBookmark(WordDoc, "bogstav", Me!bogstav) objword.Visible = True DoCmd.Hourglass False End Sub 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
Private Sub Nr_Click() Dim objword As New Word.Application Dim WordDoc As New Word.Document Set WordDoc = objword.Documents.Add("D:\forret\brev1.doc") End Sub
Mit eksempel der er omtalt i dit link (Jeg tror også du hast fået det), er beregnet til at sende en formular's felter til et Worddokument. Altså kun een enkelt post.
Hvis du vil brevflette, mener jeg det vil være bedre at benytte Word's brevfletnings funktion. Der kan du flette lige så mange poster fra databasen som du vil. Når brevfletningen fungerer, kan du så åbne det ønskede brev fra Access.
Ja det har jeg fået til at virke, men det er jo altid rart at man kan orne det hele fra access. - Jep har fået dit eksempel, kan bare ikke forstå at jeg ikke kan bruge bookmarks i den version der ligger på http://www.makeiteasy.dk/eksempler/Brevfletning.zip
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.