Har en mall, som innehåller bokmärken för att markera plats i dokument där text ska läggas in via programkod från ett VB-program. Fungerar denna koden? Hej, Lite kod:Automation i WORD via VB mha Bookmarks
Det går utmärkt att generera ett worddokument och mina text fält fylls visserligen i, men den verkar inte kunna skriva över hela bokmärkestexten, någon som vet varför.
Extra knepigt blir det om sätter två bokmärken efter varandra (typ fakturaadresshemadress) då skriver den över den som existerar medans den andra står kvar.
Min fråga är alltså hur man väljer HELA bokmärket för överskrivning via kod?
Vore tacksam för ideerSv: Automation i WORD via VB mha Bookmarks
<code>
Public Sub GenerateDocument()
Dim Word As Word.Application
Dim Doc As Word.Document
Set Word = New Word.Application
Set Doc = Word.Documents.Add("C:\Mall.dot")
Doc.Bookmarks("Namn").Range.Text = "Nisse"
Doc.Bookmarks("Gatuadress").Range.Text = "Storgatan 1"
Doc.Bookmarks("PostNr").Range.Text = "123 45"
Doc.Bookmarks("Ort").Range.Text = "Stockholm"
Doc.SaveAs "C:\Result.doc"
Doc.Close
Word.Quit
End Sub
</code>
Annars kanske det är bokmärkena som det är fel på. Sv: Automation i WORD via VB mha Bookmarks
Visa oss din kod så kan vi se problemställningen i sin helhet.
Andreas: Varför inget With-statement för doc?
//DennisSv: Automation i WORD via VB mha Bookmarks
<code>
Set objWordDoc = objWordApp.Documents.Add(Template:=sMallSokvag)
With objWordDoc
.Bookmarks("Namn").Range.Text = txtFornamn + " " + txtEfternamn
.Bookmarks("Fornamn").Range.Text = txtFornamn
If txtForetagsnamn(0) <> "" And nAdressTypId = 1 Then 'bara vid Arbetsadress
.Bookmarks("Foretagsnamn").Range.Text = txtForetagsnamn(0) & vbCrLf
Else
.Bookmarks("Foretagsnamn").Range.Text = ""
End If
.Bookmarks("Adress").Range.Text = sAdress1
If sAdress2 = "" Then
.Bookmarks("AdressExtra").Range.Text = sAdress2
Else
.Bookmarks("AdressExtra").Range.Text = sAdress2 & vbCrLf
End If
.Bookmarks("Postadress").Select.Range.Text = fSplittPostnr(sPostnummer) & " " & sPostort
.Bookmarks("Land").Select.Range.Text = sLand
End With
</code>
Så här ser min kod ut, jag hittade ett annat sätt att traversera bookmarks och sätta texten, fungerar lite mer tillförlitligt än ovanstående, men om någon har orsaken till varför jag ibland inte lyckas skriva över hela Bookmark-namnet är jag väldigt intresserad av det.
Det andra sättet utnyttjar Selection objektet och metode goto
Selection.Goto What:=wdGoToBookmark, Name:="Namn"
Selection.TypeText = "Hobbelito"
Det funkar jättebra, en lite grej bara, när man försöker mata in en tomsträng till TypeText metoden gillar den inte det, istället skriver den ut Bookmarknamnet!? Iofs är det ju i min mall så att Bookmarknamnet och den text som återfinns på bokmärkets plats likadan, och det är nog den som skrivs ut, men jag vill ju att den ska ersättas mot en tomsträng.
Tack för hjälpen ledde mig på rätt väg.