Jag anänder Set Word = CreateObject("Word.Application") .Quit Med .Quit får jag felmeddelandet om att the remote server machine does not exist or is unavailable. Programmet har testats på en annan dator och där kommer meddelandet att Normal.dot har ändrats vill du spara? Egentligen ska man inte skriva så här men vad händer om du gör det? Hur öppnar du själva dokumentet (Wordrapporten)? Har dokumentet makron? Hur stänger du dokumentet, med kod eller som vanligt i Word? Innehåller koden någon objektvariabel för dokumentet och isåfall sätter du den till Nothing? Här är en del av koden jag använder <code> Det blir samma felmeddelande på Close som på Quit. På raden Det finns en del att ta hänsyn till när man blandar automatisk och manuell hantering av en applikation, i det här fallet Word. Tack för att du ledde mig genom denna djungel! Nu får jag inga felmedelnaden och är lycklig ingen:) oWdDoc.Close stänger Worddokumentet och det är ju inte aktuellt förrän du har hunnit läsa det. Då är väl allt OK då! Det finns inget i den här trådens kod som gör ändringar i Normal.dot så det är svårt att veta vad som behöver sparas. Meddelande om att Normal.dot har ändrats får den som har "Verktyg-Alternativ-Spara-Uppmana att spara mallen Normal" ikryssad, annars sparas den automatiskt när det behövs. Tackar och bugar väldigt för hjälpen!! Nej, det ändrar bara fonten i själva dokumentet, inte i Normal.dot.Avsluta Worddokument
Med Word.Visible = True läser jag min Wordrapport, stänger den och säger att jag inte vill spara.
I stängknappen har jag Set Word = Nothing
Hur blir jag av med att när jag stänger av datorn kommer frågan om jag vill spara Worddokumentet som tydligen ligger kvar?Sv: Avsluta Worddokument
Kontrollera först med GetObject om det är igång.
(Set blnIsRunning = GetObject(ev. Param, "Word.Application")
Kolla som vanligt eller med felkod <> 0.Sv: Avsluta Worddokument
Men maskinen står här på bordet, jag ser den klart och tydligt.Sv: Avsluta Worddokument
Prova med att ha Set Word = Nothing i samma Sub-rutin
som Set Word = CreateObject("Word.Application").Sv: Avsluta Worddokument
Hur kan Set Word = CreateObject("Word.Application") påverka Normal.dot?Sv: Avsluta Worddokument
Följande fungerade på min dator:
Option Explicit
Dim Word As Object
Private Sub Command1_Click()
Set Word = CreateObject("Word.Application")
End Sub
Private Sub Command2_Click()
Word.Quit
End Sub
Private Sub Command3_Click()
Word.Visible = True
End SubSv: Avsluta Worddokument
Sv: Avsluta Worddokument
Deklaration
Dim Word As Word.Application
Dim Doc As Word.Document
Sedan hämtas data med SQL till ett RecodSet. Dessa data skall skrivas ut i Word.
Set rsPerson = New ADODB.Recordset
rsPerson.Open strSQLPersonFödd, ConnPerson
Set Word = CreateObject("Word.Application")
Set Doc = Word.Documents.Add()
Sedan kommer en loop genom recodsetet med
Word.Selection.TypeText rsPerson!ForNamn
osv...
rsPerson.Close
ConnPerson.Close
Word.Visible = True
Det finns makron i dokumentet men de används inte här.
Worddokumentet som nu visas stänger jag från Word.
I Avslutaknappen har jag koden
Set Doc = Nothing
Set Word = Nothing
Detta med Word.Quit får jag bara felmeddelande med.Sv: Avsluta Worddokument
Dim Word As Word.Application
Dim Doc As Word.Document
Set Word = CreateObject("Word.Application")
Set Doc = Word.Documents.Add()
Word.Selection.TypeText "Test"
Word.Visible = True
Stop
Doc.Close wdDoNotSaveChanges
Set Doc = Nothing
Word.Quit wdDoNotSaveChanges
Set Word = Nothing
</code>Sv: Avsluta Worddokument
Doc.Close wdDoNotSaveChanges
kommer felmeddelandet som jag beskrev ovan om att the remote server machine does not exist or is unavailable. Om jag inte skapar något dokument utan har Close och Quit i Anslutaknappen kommer felmeddelande om att Object variable or With block variable not set.
Endast när jag har
Set Doc = Nothing
Set Word = Nothing
blir det inga fel men då vet jag inte om dokumentet avslutats.Sv: Avsluta Worddokument
När man använder CreateObject skapas en ny instans av Word. Om Word redan är startat på datorn får man alltså två instanser. För att undvika det bör man först undersöka om Word körs.
<code>
Private Sub cmdReport_Click()
Dim oWdApp As Word.Application
Dim oWdDoc As Word.Document
On Error Resume Next
' Om Word redan körs sätts objektvariabeln till Word-applikationen
Set oWdApp = GetObject(, "Word.Application")
' Om Word inte körs startas det.
' Använder "New" istället för "CreateObject" eftersom vi snackar early binding här
If Err Then Set oWdApp = New Word.Application
On Error GoTo cmdReport_Err
' Skapar nytt Worddokument
Set oWdDoc = oWdApp.Documents.Add
' Skriver något i dokumentet och gör Word synligt
oWdDoc.Range.InsertAfter "Hej hopp"
oWdApp.Visible = True
cmdReport_End:
Set oWdDoc = Nothing
Set oWdApp = Nothing
Exit Sub
cmdReport_Err:
If Not oWdApp Is Nothing Then
If oWdApp.Visible = False Then oWdApp.Quit wdDoNotSaveChanges
End If
GoTo cmdReport_End
End Sub
</code>
Koden ovan skapar ett Worddokument och lämnar sedan över ansvaret till användaren att spara/stänga dokumentet och själva Word.
Om du vill skriva kod för att "städa upp Word-grejorna" när programmet avslutas måste du ta hänsyn till att användaren kan ha stängt dokumentet och kanske även avslutat Word. Innan du avslutar Word med kod bör du också ta hänsyn till om användaren har öppnat/skapat andra Worddokument som behöver sparas och/eller stängas.Sv: Avsluta Worddokument
Behöver jag inte använda oWdDoc.Close?
Skall det i Avslutaknappen se ut som efter cmdReport_Err: ?Sv: Avsluta Worddokument
I min exempelkod ovan skapar du ett worddokument som sedan får leva sitt eget liv. I och med att du har satt objektvariablerna till Nothing så har ditt program inte längre någon kontakt med Wordapplikationen eller Worddokumentet och kan därför inte erbjuda någon avslutafunktion.
Behövs en avslutafunktion tycker du? Är det inte OK att användaren själv tar hand om att stänga worddokumentet och wordapplikationen när han/hon/du har läst rapporten?Sv: Avsluta Worddokument
Jag nämde tidigare att en testperson fick meddelande om att Normal.dot hade ändrats. Är det möjligt att det också är löst med denna finurliga kodning?Sv: Avsluta Worddokument
Ändringar i verktygsfälten, inspelning av makron, klickning på knappen "Standard..." i dialogrutor för t.ex. utskriftsformat och formatera tecken är exempel sådant som ändrar Normal.dot.Sv: Avsluta Worddokument
Jag kom på att det finns fontförändringar i koden
Word.Selection.Font.Color
Word.Selection.Font.Bold
Word.Selection.Font.Size
Är det månne detta som gör att användaren kan få frågan om att spara Normal.dot?Sv: Avsluta Worddokument
PS. lite snabbare och lite snyggare...
With Word.Selection.Font
.Color
.Font
.Size
End With
DS.