Wolverin Skrevet 31. mai 2005 Del Skrevet 31. mai 2005 Jeg driver å lager en access base, og i denne ligger det informasjon om person. Fornavn, Ettenavn, Adresse_1, Adresse_2, Postnr og Poststed. Jeg ønsker nå å automatisk "flette" inn informasjonen som står i det aktive sjema i Access inn i en Word fil som er et brev. Har jeg altså oppe person med id = 1, og navnet er Ola Nordmann. Så ønsker jeg at når jeg klikker på Går til Word knappen min, så skal Word åpnes med brevet, og Ola Nordmann med mer informasjon skal flettes inn i brev hodet. Lenke til kommentar
Wolverin Skrevet 2. juni 2005 Forfatter Del Skrevet 2. juni 2005 Da har jeg funnet en løsning, ikke helt 100% slik jeg ønsket det, men den fungerer. Det første jeg gjorde var å skrive brevet med plass til flette feltene. Så laget jeg en spørring i Access som fikk kode som følger SELECT reg_dato, Fornavn, Etternavn, Adresse, Postnr, Poststed FROM kunde WHERE (((k_id) Like [Skjemaer]![Hovedskjema]![k_id])); Med andre ord så henter jeg ut informasjon fra tabellen kunde, og jeg henter da den informasjonen jeg trenger for å flette i brevet mitt. Så sier jeg at jeg skal ha postene til den kunden som har akkurat samme ID som jeg har oppe i skjema "hovedkjema" som da er skjema man jobber i. Neste steg nå var å lage en fletting mot Word dokumentet. Dette gjorde jeg ved å markere spørringen min "word_flett", også klikket jeg på verktøy -> office koblinger -> flett data med Word. Så valgte jeg de flette feltene jeg skulle ha inn med i dokumentet mitt, og lagret til slutt dokumentet. Så kom delen med å åpne og skrive ut dokumentet. Til dette formålet ble løsningen å programmere, da jeg ikke fant noen "ferdig løsning" på det. Jeg laget meg da en modul som jeg har kalt Word_kobling. Ikke så kreativt navn, men det funker. Koden til funksjonen jeg laget er som følger Function SkrivUtDoc() Dim WordObj As Object Set WordObj = CreateObject("Word.Application") WordObj.Documents.Open "c:\word\kundebrev.doc" WordObj.PrintOut Background:=False WordObj.Quit Set WordObj = Nothing End Function Denne testet jeg så, og den fungerte som ønsket, bare at jeg måtte skrive inn en verdi for k_id (kunde id) til spørringen min. Neste steg ble å få kjørt modulen. Til dette laget jeg en makro. Makro "flett_word" har en KjørBasicKode med funksjonsnavnet som parameter. Så laget jeg en knapp i skjemaet mitt, hovedskjema. På knappen er koden DoCmd.RunMacro ("flett_word") Nå er det blitt slik at skjema som spørringen henter kunde id fra er åpent og har en aktiv kunde innlest. Spørringen har da en id å bruke, og spør da ikke etter denne. Funksjonen min åpner Word flette dokument, som henter flettedata fra spørringen som bare returnerer en id, siden id er et autonummer og er unikt. Navn, adresse og post informasjon legges inn i dokumentet, og funksjonen skriver dette direkte ut på skriveren som er definert i Windows. Word delen kjøres som en bakgrunns handling, og vises ikke på skjermen. Så får brukeren beskjed via en msgbox at dokumentet er printet. Dokumentet ligger nå på skriveren. Lenke til kommentar
Wolverin Skrevet 8. juni 2005 Forfatter Del Skrevet 8. juni 2005 Da har jeg fått beskjed om at det er ønskelig at Word dokumentet bare skal åpnes i Word og være åpent der, fletting skal fremdeles skje, men dokumentet skal ikke skrives ut automatisk. Dette er fordi dokumentet skal håndspålegges før man skriver det ut. Åssen blir det da? Noen ideer? Jeg forsøkte med å bare editere på koden jeg har. Function WordDoc() Dim WordObj As Object Set WordObj = CreateObject("Word.Application") WordObj.Documents.Open "c:\word\kundebrev.doc" Set WordObj = Nothing End Function Slik den blir nå så skriver den ikke ut dokumentet selv, men når jeg klikker på knappen så skjer det ikke noe første gang. Klikker jeg en gang til, så får jeg vite at Word dokumentet alt er aktivt, og at jeg kan åpne en sikkerhestkopi eller varsle. Velger jeg sikkerhetskopi så åpnes Word og dokumentet ligger der, men flettingen fungerer ikke som den skal. Word ligger også med en prosess i maskinen som tar 99% av CPU, og maskinen går som sirup etter en liten stund. Så må jeg inn i taskmanager og fjerne prosessen. Word dokumentet er også "låst" for sletting og editering til denne prosessen blir tatt. Noe fungerer ikke som tenkt. Lenke til kommentar
Wolverin Skrevet 8. juni 2005 Forfatter Del Skrevet 8. juni 2005 Da har jeg funnet løsning på dette også, tror jeg. Når jeg bare skal ha åpnet word og bruke flettefunksjonen, men ikke lukke dokumentet igjen og heller ikke gjøre noen automatisk endring på det, så slo det meg at jeg kunne bruke Shell kommandoen i VBA (Visual Basic for App.) Dim stien As String stien = "winword.exe c:\kundebrev.doc" MsgBox ("Starter opp: " & stien) Call Shell(stien, 1) Så enkelt kaller Access da opp Word og ber den om å åpne filen med navn kundebrev.doc. Word åpner nå brevet. Det jeg må jobbe litt mer med er å få flettingen til å vise meg bare den ene raden jeg er på. Det tror jeg at jeg løser ved å peke på en spørring som tidligere. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå