Avatar billede swil Nybegynder
02. december 2001 - 15:39 Der er 23 kommentarer og
1 løsning

Indsæt felter fra Access i Word

I fortsættelse af tidligere hjælp her, har jeg strikket en lille rutine sammen, der åbner Word og smider felter fra Access ind i bogmærker i Word, menjeg mangler lige lidt hjælp. Hvis Worddokumentet ikke indeholder alle bogmærkerne, stopper \"compileren\" med fejl, hvordan testes der ud af det? Nogen gode forslag?

Private Sub Kommandoknap12_Click()
Dim myword As Word.Application
Dim aConverter As Variant
Dim I As Integer
Dim filplacering As String
  \'Stien til dokumentet
  filplacering = readconstant(\"P1\")
  Set myword = New Word.Application
  \'Åbn dokument
  myword.Documents.Open filename:=filplacering
  \'Bogmærker
  myword.ActiveDocument.Bookmarks(\"Companyname\").Select
  myword.Selection.TypeText Text:=Me!Companyname
  myword.ActiveDocument.Bookmarks(\"Adress1\").Select
  myword.Selection.TypeText Text:=Me!Adress1
  myword.ActiveDocument.Bookmarks(\"Adress2\").Select
  myword.Selection.TypeText Text:=Me!Adress2
  myword.ActiveDocument.Bookmarks(\"PostalCode\").Select
  myword.Selection.TypeText Text:=Me!Postalcode
  myword.ActiveDocument.Bookmarks(\"City\").Select
  myword.Selection.TypeText Text:=Me!City
  myword.Visible = True
Set myword = Nothing
End Sub
Avatar billede jassens Nybegynder
02. december 2001 - 16:00 #1
Skriv en lille rutine til gennemløb af Bookmarks-collection, og check om dit bookmark eksisterer. Hvis ikke, ja så spring videre til næste.
Avatar billede swil Nybegynder
02. december 2001 - 16:20 #2
>jassens

Det var jo det jeg håbede der var en der ville hjælpe mig med, så god til VBA er jeg ikke endnu.
Avatar billede jassens Nybegynder
02. december 2001 - 17:47 #3
Jeg har ikke just rodet med bookmarks; men det er vel som enhver anden collection i vba.
Prøv at lave en funktion i stil med dette:

Private func ExistBookmark (navn as string) as boolean

with myword.activedocument

ExistBookmark = False

for i=1 to .bookmarks.count-1
  if .bookmarks(i).name = navn then
      ExistBookmark = True
      Exit Function
  end if
next i

End Function
Avatar billede swil Nybegynder
02. december 2001 - 17:48 #4
Prøver.
Avatar billede swil Nybegynder
02. december 2001 - 18:38 #5
Nedenstående giver:
Invalid eller ukvalificeret reference

.Bookmarks.Count - 1

Måske et bedre forslag?
Avatar billede jassens Nybegynder
02. december 2001 - 18:59 #6
Måske senere, jeg må lige ud med hunden og have lidt at spise.
Og dog, du skal lige førge for at have referencen til myword.activedocument iorden. Måske skal du ikke lave det som en funktion i første omgang, men først prøve at indkoporere det et sted i din eksisterende kode.
Avatar billede swil Nybegynder
02. december 2001 - 19:20 #7
Jeg kopierede det ind i min eksisterende kode og referencen er også OK. God tur med hunden.
Avatar billede mugs Novice
02. december 2001 - 20:07 #8
Dette er ikke afprøvet - men kun et blandt flere skud i tågen:

On Error GoTo ErrorHandler   
som aktiverer fejlbehandlingen. Du skal så have en linie noget lignende:
Errorhandler:
Her skrives hvad der skal ske.

En anden mulighed:
Error Goto 0   
Som deaktiverer fejlopfangningen

Og en tredje:
On Error Resume Next
Som udsætter fejlopfangningen.
   
Avatar billede swil Nybegynder
02. december 2001 - 20:12 #9
>Mugs
On Error Resume Next
virker, anden mulighed virker ikke.

Men du skriver fejlopfangningen udsættes - til hvornår?
Avatar billede mugs Novice
02. december 2001 - 20:33 #10
Det er taget fra Access hjælpefil.

Jeg har slået op i en af mine Access-bøger, og her står der:

Resume Next, der returnerer til linjen efter den linje, hvor fejlen opstod

Avatar billede swil Nybegynder
02. december 2001 - 20:36 #11
>Mugs
Fint nok, jeg venter lige og ser <jassens> svar, hvis han arbejder med noget, vil jeg ikke lige lukke spørgsmålet.

Vender tilbage
Avatar billede mugs Novice
02. december 2001 - 20:37 #12
Frit efter hukommelsen:

Var det ikke et spørgsmål hvor du tog lidt svar fra mig og lidt fra en anden?
Så vidt jeg husker, havde jeg lavet 2 procedürer til at indsætte data ved hjælp af bogmærker. Den første som definerede data i bogmærker. Denne kaldte derefter en anden procedüre, der afgjorde om bogmærker eksisterede i dit Word-dokument. Eksisterede bogmærket blev data indsat - ellers ikke.
Avatar billede swil Nybegynder
02. december 2001 - 20:43 #13
>Mugs du har jo fuldstændig ret, jeg måtte imidlertid dit absolut udmærkede forslag, fordi jeg skulle have funktionen \"filplacering\" til at hente stinavn m.m. i forbindelse med tryk på en tast.

Jeg kunne derfor ikke \"hitte\" ud af din løsning med denne linie:

Set WordDoc = objword.Documents.Add(\"C:\\Documents and Settings\\Søren Wiilsbøll\\Dokumenter\\MGDatabase\\brev1.doc\")

Hvor det i parantesen skulle afløses af ovennævnte, derfor denne omskrivning af div. gode forslag.
Avatar billede swil Nybegynder
02. december 2001 - 20:44 #14
... måtte imidlertid dit absolut...
skulle være:
...måtte imidlertid ændre dit absolut...
Avatar billede swil Nybegynder
02. december 2001 - 21:08 #15
>Mugs
Det virkede ikke så godt alligevel. Den sprang ikke fejlene over, men indsatte bogmærkerne steder hvor der ikke var bogmærker i dokumentet??
Avatar billede mugs Novice
02. december 2001 - 21:53 #16
Ja - det var jo ikke lige det, der var meningen. Du må nok afvente jassens guldkorn i hvert fald iaften. Jeg har været på arbejde siden kl lo.. imorges, så der er ved at være udsolgt.
Avatar billede swil Nybegynder
02. december 2001 - 21:55 #17
OK Mugs
Avatar billede jassens Nybegynder
02. december 2001 - 22:31 #18
OK, selvfølgelig kan det gøres uden absolut at lave errors med vilje.
Det her skulle funke, pas på, et par af dine feltnavne og variable hedder noget andet her i min test, så dem skal du lige rette (Address1 i stedet for Adress1 osv.)

Private Sub Command0_Click()
Dim myword As Word.Application
Dim aConverter As Variant
Dim i As Integer
Dim filplacering As String
  \'Stien til dokumentet
  filplacering = \"d:\\data\\testdokument.doc\"
  Set myword = New Word.Application
  \'Åbn dokument
  myword.Documents.Open filename:=filplacering
  myword.Documents.Open filplacering
  \'Bogmærker
  If ExistBookmark(\"Companyname\", myword.ActiveDocument) Then
    myword.ActiveDocument.Bookmarks(\"Companyname\").Select
    myword.Selection.TypeText Text:=Me!Companyname
  End If
 
  If ExistBookmark(\"Address1\", myword.ActiveDocument) Then
    myword.ActiveDocument.Bookmarks(\"Address1\").Select
    myword.Selection.TypeText Text:=Me!Address1
  End If
 
  If ExistBookmark(\"Address2\", myword.ActiveDocument) Then
    myword.ActiveDocument.Bookmarks(\"Address2\").Select
    myword.Selection.TypeText Text:=Me!Address2
  End If
 
  If ExistBookmark(\"Postalcode\", myword.ActiveDocument) Then
    myword.ActiveDocument.Bookmarks(\"PostalCode\").Select
    myword.Selection.TypeText Text:=Me!Postalcode
  End If
 
  If ExistBookmark(\"City\", myword.ActiveDocument) Then
    myword.ActiveDocument.Bookmarks(\"City\").Select
    myword.Selection.TypeText Text:=Me!City
  End If
 
  myword.Visible = True
Set myword = Nothing
End Sub

Function ExistBookmark(BMname As String, objDoc As Document) As Boolean
    Dim i As Integer
    ExistBookmark = False
    For i = 1 To objDoc.Bookmarks.Count
        Debug.Print objDoc.Bookmarks(i).Name
        If objDoc.Bookmarks(i).Name = BMname Then
            ExistBookmark = True
            Exit Function
        End If
    Next i
End Function
Avatar billede swil Nybegynder
02. december 2001 - 22:34 #19
Prøver med det samme
Avatar billede swil Nybegynder
02. december 2001 - 22:41 #20
>Jassens
Det virker fint, giver dog en fejl, hvis et af felterne indeholder en null-værdi (adress2 er ikke altid udfyldt), kan der nemt laves en tilføjelse?
Avatar billede jassens Nybegynder
02. december 2001 - 22:50 #21
Ja du kan teste på om feltet indeholder nulværdi:
IF NOT ISNULL(Me!xxx) THEN
  .........
END IF
Så udføres det kun hvis feltet indeholder en værdi, også hvis den indeholder en blank, hvilket ikke er det samme som nulværdi.
Avatar billede swil Nybegynder
02. december 2001 - 22:53 #22
Jamen det er jo fantastisk, pointene er givet - tusind tak for hjælpen.
Avatar billede jassens Nybegynder
02. december 2001 - 23:14 #23
En lille ting mere før jeg går til ro:
I Exist-funktionen bør du nok lige checke, om der overhovedet ER nogle bookmarks.
IF xxx.bookmarks.count=0 then
  funktionsnavn = False
  exit function
endif
Go\'nat og sov godt
Avatar billede swil Nybegynder
02. december 2001 - 23:16 #24
Tak i lige måde og endnu en gang tak
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