Hej! Du kan inte använda PrintPreview om Word-applikationen inte är synlig, eller rättare sagt du ser inte det förhandsgranskade dokumentet och det är ju inte mycket till granskning, eller hur! Hej Åsa och tack för ditt snabba svar. Hej igen! Hej och tack igen! Hej igen, Hej och tack igen Åsa! Just när det gäller utskrift (inte förhandsgranska) kan man ange att utskrift inte ska ske i bakgrunden för att undvika kollision. Kanske kan vara värt att testa....Mera Förhandsgranska i VBA
Jag plockar in värden (via VBA) från en databas till en wordmall som jag skriver ut.
Skulle gärna förhandsgranska rsultatet före utskrift, men jag har inte lyckats få PrintPreview att fungera.
Här följer lite kod som jag försökt använda.
Det som jag lyckats få att fungera är : .PrintOut
Dim docSplintdok As Word.Document
Set objWord = New Word.Application
objWord.Visible = False
Set docSplintdok = Documents.Add("Lonespecifikation.dot", 1)
…
’Här skriver jag in uppgifter i wordmallen Lonespecifikation
….
'Skriv ut dokumentet
With docSplintdok
' .PrintOut 'Fungerar ok
'nedan endel av mina fruktlösa försök
' .PrintPreview
' wdPrintPreview
' If Application.PrintPreview = False Then
' ActiveDocument.PrintPreview
' End If
' If docSplintdok.PrintPreview = False Then
' docSplintdok.PrintPreview
' End If
' .PrintPreview
' Set MyForm = objWord
' Set MyForm = docSplintdok
' DoCmd.SelectObject acForm, MyForm.Name, True
' DoCmd.RunCommand acCmdPrintPreview
Tacksam för svar/HarrySv: Mera Förhandsgranska i VBA
Så om du vill använda Words förhandsgranskning får du lägga till den här koden:
<code>
objWord.Visible = True
docPlintdok.PrintPreview
Set docPlintdok = Nothing
Set objWord = Nothing
</code>Sv:Mera Förhandsgranska i VBA
Det fungerade, men hur får jag det att fungera så att jag inte får frågan om jag skall spara undan min mall och så att word frigörs ur minnet när jag antingen trycker på print eller stäng vid förhandsgranskningen?
Utan förhandsgranskning så var lösningen såhär:
'Spara inte ändringar eftersom det är en mall
' docSplintdok.Close SaveChanges:=False
'Frigör Word från minnet
' objWord.Quit
mvh HarrySv: Mera Förhandsgranska i VBA
för att slippa frågan om att spara kan du skriva
<code>
docSplintdok.Saved = True
</code>
när alla ändringar i dokumentet är klara. Det gör att dokumentet betraktas som sparat.
Du kan inte avsluta Word i koden, det får du överlämna till användaren när han/hon har granskat klart och ev skrivit ut. Däremot bör du sätta objektvariablerna till Nothing som jag skrev i mitt förslag:
<code>
Set docSplintdok = Nothing
Set objWord = Nothing
</code>Sv:Mera Förhandsgranska i VBA
Frågan om Spara/icke spara försvann.
Det hela fungerade helt ok EN gång. Jag vet inte om jag har något underligt i mitt system eller vad det är som händer.
Förloppet är som följer:
-Jag trycker på "knappen för skriv" och hamnar i min skrivrutin (med förhandsgranskning)
-Mall1 (förhandsgranskning) - Word visas
-Jag stänger förhandsgranskningen.
-Hamnar in i word med mallen framme. Stänger även word.
-Hamnar tillbaka till mitt formulär med bl.a "skrivknappen".
Allt ovanstående är ju någorlunda ok. Användaren får leva med att stänga både förhandsgranskning och word.
Nu till det underliga!
Trycker jag nu en gång till på "skrivknappen" i mitt formulär så får jag felmeddelandet:
" körfel nr '462' Fjärrservern finns inte eller är inte tillgänglig".
Väljer jag felsök i meddelanderutan så fastnar jag i min skrivrutin på raden:
Set docSplintdok = Documents.Add("Lonespecifikation.dot", 1)
Dessutom så fungerar inte skrivfunktionen på nytt även om jag stänger programmet och börjar om med att starta om access.
För att det skall fungera igen EN gång så blir jag tvungen att starta om datorn!.
Försökte med att lämna bort raden ' Set docSplintdok = Nothing men resultatet var i alla fall det samma.
koden för min PrintPreview ser nu ut såhär:
objWord.Visible = True
docSplintdok.PrintPreview
docSplintdok.Saved = True
Set docSplintdok = Nothing
Set objWord = Nothing
DoEvents
Exit Sub
PS: till saken hör att mitt Access program är ett lokalt system som körs av en användare åt gången så här ingår inte nån server för nät eller fleranvändare.
Hoppas du eller någon har en lösning på underligheterna!
mvh / HarrySv: Mera Förhandsgranska i VBA
jag har varit ute och rest och inte kunnat svara dig, men nu är jag tillbaka igen...
Felet som du får beror på att någon objektvariabel "hänger kvar" när koden avslutas. När jag använder Word från Access så brukar jag använda 'CreateObject("Word.Application")' istället för 'New Word.Application'. Dessutom brukar jag kontrollera om Word redan är startat och isåfall inte starta en ny instans.
Testa den här koden, den kan jag köra om och om igen utan problem:
<code>
Sub PreviewDoc()
Dim objWord As Object
Dim docSplintdok As Word.Document
Dim bWordStartedBySub As Boolean
' Om Word redan är startat skapas en referens till den instansen
' annars startas en ny instans av Word
On Error Resume Next
Set objWord = GetObject(, "Word.Application ")
If Err.Number <> 0 Then
Set objWord = CreateObject("Word.Application")
Err.Clear
bWordStartedBySub = True ' Noterar att Word startas av denna sub
End If
' Ett nytt dokument skapas med mallen
On Error GoTo PreviewDoc_Err
Set docSplintdok = objWord.Documents.Add("Lonespecifikation.dot")
' Infoga innehåll i worddokumentet
' ....
' ....
' Förhandvisningen slås på och dokumentet sätts till sparat
objWord.Visible = True
docSplintdok.PrintPreview
docSplintdok.Saved = True
PreviewDoc_End:
' Städar upp
Set docSplintdok = Nothing
Set objWord = Nothing
Exit Sub
PreviewDoc_Err:
MsgBox "Det gick inte att förhandsgranska dokumentet.", vbExclamation
' Om ett fel uppstått efter att Word startas så avslutas Word
If bWordStartedBySub Then
If Not objWord Is Nothing Then objWord.Quit wdDoNotSaveChanges
End If
GoTo PreviewDoc_End
End Sub
</code>
Att användaren måste stänga av både förhandgranskningen och Wordapplikationen får man nog leva med. Jag har sett någon fiffig lösning på Google Groups där man har subklassat wordapplikationen för att fånga stängningen av förhandsgranskafönstret men det tyckte jag var overkill... ;-)Sv:Mera Förhandsgranska i VBA
Hoppas du haft en bra resa!
Har provat din förbättrade rutin och den fungerar bättre än mina försök.
Problemet med att förhandsgranskningen fungerar bara EN gång kvarstår dock.
Det verkar ha att göra med att kommunikationen med användningen av en word-mall tar en sån fruktansvärd lång tid.
För att utskriftsrutinen skall fungera på nytt efter en utskrift, så är jag nu tvungen att stänga förmuläret och vänta minst 10 sekunder innan jag begär en ny utskrift. (Inte acceptabelt).
Har försökt via debugg att lokalisera vad det beror på, men det blir ju så "nyckfullt" eftersom tidsfaktorn finns med i bilden.
Jag har fått ett gott råd att inte använda word vid utskrift utan att istället gå över till användning av en rapportgenerator.
Det lutar väldigt starkt åt att jag kommer att följa det rådet även om det bästa såhär på kort sikt ju vore om jag fick utskriftrutinen via word att fungera.
Med bästa hälsningar/ HarrySv: Mera Förhandsgranska i VBA
<code>
docSplintdok.PrintOut False
</code>