Avatar billede jimse Nybegynder
21. marts 2002 - 13:37 Der er 13 kommentarer og
2 løsninger

Indsætte dokument i objectramme.

Det er ikke noget problem at indsætte/redigere et worddokument i objektrammen.
Problemet er at få dtabasen til selv at hente et specielt (formular) dokument når man klikker på feltet og feltet er tomt i forvejen.
21. marts 2002 - 17:37 #1
Jeg er ikke helt med: vil du, vha VBA, indsætte et bestemt dokument i en bundet/ubundet objektramme? Er feltet budet til et OLE-felt i en tabel?

Kan du uddybe det lidt?
Avatar billede jimse Nybegynder
21. marts 2002 - 21:11 #2
Ja det er en bundet objektramme, og ja det er et bestemt dokument jeg vil have ind hver gang der oprettes en ny post.
Avatar billede jimse Nybegynder
21. marts 2002 - 21:13 #3
Undskyld der var jeg lidt hurtig. Det er ikke en tabel jeg vil hente ind, men et worddokument, hvis detkan lade sig gøre.
Avatar billede mugs Novice
21. marts 2002 - 21:48 #4
Hvorfor dog hente Word-dokumentet ind i Access? Lav en henvisning til Word, og når du vil se det tilhørende Word-dokument trykker du blot på en kommandoknap, der så åbner Word, og viser det dokument der svarer til posten i Access. Det er dog nødvendigt, at Access indeholder en primær nøgle der svarer til dokumentets navn for at tingene kan hænge sammen.

læg din email hvis du vil have et eksempel tilsendt. (Er på arbejde til LØR morgen - så lidt tålmodighed).
21. marts 2002 - 22:25 #5
Følgende kode indsætter et dokument (som link) i et OLE-felt:

    Me!OLE.Class = "Word.Document"    ' Set class name.
    Me!OLE.OLETypeAllowed = acOLELinked
    Me!OLE.SourceDoc = "C:\Dokumenter\MitDokument.doc"
    Me!OLE.SourceItem = ""
    Me!OLE.Action = acOLECreateLink
    Me!OLE.SizeMode = acOLESizeZoom


Koden forudsætter at dit OLE-felt blot hedder OLE.

Koden kan placeres på en knap eller på formens BeforeInsert-hændelse eller hvor du nu har lyst.

/Thomas
Avatar billede mugs Novice
21. marts 2002 - 22:47 #6
Jeg vil også være med. Følgende kode henter et Word-dokument afhængig af Access-formularens data:

On Error GoTo err_open
Dim docname As String
Dim objword As Word.Application
Dim objdoc As Word.Document
Const dir As String = "C:\opskrifter\"
Const ext As String = ".doc"
docname = dir & Me.Nr & 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
Exit Sub
err_open:
MsgBox "fejlkode: " & Err.Number

Det forudsætter:
- at dokumentet er lagret på c-drevet (Const dir as String)
- at Access indeholder det primære nøglefelt Nr og word-dokumentet hedder det samme som Nr (docname = dir & Me.Nr & ext)

Koden placeres på en kommandoknap, hvor du evt kan benytte den efter en søgning efter den korrekte post i Access.
21. marts 2002 - 22:53 #7
Hej Mugs,

Hvor gemmer du objektet henne? Jeg kan kun se, at du laver en almindelig OLE automation til Word!?? (omend den er lidt besværlig :)

jeg tror at jimse ønsker en kode, som gemmer et dokument i en bundet objektramme.
Avatar billede jimse Nybegynder
22. marts 2002 - 07:27 #8
Godmorgen.
>> Thomas, du har ganske ret. Det jeg ønsker er at dokumentet bliver gemt i den bundne ramme. Sagen er at dokumentet der bliver hentet ind er en formular der skal udfyldes og som hører sammen med en masse andre oplysninger der ligger i den enkelte post.

Formularen består af tomme felter som skal udfyldes forskelligt for hver post der oprettes i databasen. Jeg er bange for det ikke er godt nok at linke til et dokument, fordi det ikke kan styres efterfølgende, hvorimod hvis dokumentet er gemt i rammen vil det altid følge den enkelte post.

ps. Jeg forhøjer point, når vi er færdige, fordi det ser da ud som om det ikke er helt lige til.
22. marts 2002 - 07:46 #9
Hvis du vil embedde (gemme fysisk i tabellen) så ser koden således ud:
    Me!OLE.Class = "Word.Document"    ' Set class name.
    Me!OLE.OLETypeAllowed = acOLEEmbedded
    Me!OLE.SourceDoc = "C:\Dokumenter\MitDokument.doc"
    Me!OLE.SourceItem = ""
    Me!OLE.Action = acOLECreateEmbed
    Me!OLE.SizeMode = acOLESizeZoom


Linien:
Me!OLE.SourceDoc = "C:\Dokumenter\MitDokument.doc"

Kan selvfølgelig gøre mere dynamisk ved at referere til et felt eller en variabel i stedet:
Me!OLE.SourceDoc = varStiTilDokument

/Thomas
Avatar billede mugs Novice
23. marts 2002 - 08:51 #10
Godmorgen.

Jeg bruger koden på mit arbejde, hvor jeg også skal have en formular udfyldt med data der eksisterer i min db.  Når jeg har udfyldt skærmen med relevante data, hentes dokumentet med disse koder, og overfører data til Worddokumentet. (Det er vist en af dine genistreger Thomas):

Dim objword As New Word.Application
Dim WordDoc As New Word.Document
Set WordDoc = objword.Documents.Add("C:\Programmer\Microsoft Office\Skabeloner\Opskrift.doc")
Call InsertAtBookmark(WordDoc, "Opskrift", Me!Opskrift)
Call InsertAtBookmark(WordDoc, "Nr", Me!Nr)
Call InsertAtBookmark(WordDoc, "Krydderi", Me!Krydderi)
Call InsertAtBookmark(WordDoc, "Dato", Me!Dato)
Call InsertAtBookmark(WordDoc, "MType", Me!MType)
Call InsertAtBookmark(WordDoc, "Personer", Me!Personer)
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 

Når jeg er færdig med Word-dokumentet lagres i det bibliotek jeg har angivet i mit svar. Posten i Access gemmes så der kan søges efter posten, og når det er gjort trykkes på en kommandoknap, og Access henter det word-dokument der hører til den aktuelles post.

Jeg har gjort det på denne måde, for ikke at db skal vokse for meget med OLE-objekter indlagt.
Avatar billede jimse Nybegynder
25. marts 2002 - 07:47 #11
Undskyld! Men jeg får da ikke alle mail på de spørgsmål jeg deltager i.
Det er først idag jeg ser der er kommet nye indlæg.

>>Thomas jeg prøver lige dit bud af.

>>mugs dit forslag er tilsyneladende ikke det jeg står og mangler lige nu. Men jeg tror, at jeg kan få fornøjelse af det i en anden sammenhæng.
Avatar billede jimse Nybegynder
25. marts 2002 - 11:34 #12
>>Thomas, for ind i dæ...

Det virker bare helt som det skal.

Rigtig mange tak.

Der er lidt til jer begge.
25. marts 2002 - 11:37 #13
takker :)
Avatar billede jimse Nybegynder
25. marts 2002 - 14:23 #14
Jeg har ddog et lille problem.

Dokumentet blive fint sat ind, men når jeg vil fortsætte til de andre felter i posten er jeg låst fast.

Dokumentet skal også kun indsættes hvis der ikke er et i forvejen?
Avatar billede Slettet bruger
07. januar 2005 - 08:24 #15
Der er én god grund til at gemme Word-dokumenter i en tabel: Sikkerheden. Hvis du laver applikationer, der skal opfylde registerlovens krav om beskyttede personoplysninger, må disse oplysninger ikke ligge tilgængeligt direkte i filsystemet. Typisk anvendes Word dokumenter til journaler, kontinuitetesark o.lign. inden for specialundervisning og andre sociale institutioner.
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