Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Grmpf am 16.01.07 - 13:47:12
-
hallo,
ich erstelle aus einer maske über eine schaltfläche ein worddokument aus den inhalten des aktuellen dokuments. klappt soweit ganz gut.
folgendes problem :
nach langem googlen hab ich leider nichts gefunden wie ich die word-instanz sinnvoll entladen kann, nachdem der benutzer word herkömmlich schließt...
ich denke ich müsste irgndwie das window.close event der word instanz abfragen und entsprechend etwas wie Set word = Nothing machen... ist das der richtige ansatz/geht das?
mein momentanes script zum erstellen des word-objects :
Sub Click(Source As Button)
Dim session As NotesSession
Dim uidoc As NotesUIDocument
Dim ws As New NotesUIWorkspace
Dim textsel As Variant
Dim word As Variant
Set word = CreateObject("Word.Application")
word.Visible = True
word.Documents.Add
Set textsel =word.Selection
textsel.TypeText("Test")
End Sub
... mit diesem script bleiben die word-instanzen als speicherleichen im task-manager.
Freue mich über jeden hinweis ;)
danke im vorraus
matze
-
Schau dir einmal die WORD-Automationsklasse von Axel Matthies an.
http://www.free.dominoserver.de/computer/noteslibrary.nsf/d2d59a3d7fc73a2bc1256a6900638352/331dd66d2239a1b2c1256dc50038f49e!OpenDocument
Die hilft dir vielleicht bei der Transformation von "klappt schon ganz gut" zu einem echten "funktioniert stabil und immer".
An den ersten Teilen siehst du schon, wie man Word öffnet, schließt und beendet. Deshalb ausschnittsweise ein wenig Code:
'--- Deklaration von API-Funktionen ---
Declare Function SetActiveWindow Lib "user32" Alias "SetActiveWindow" (Byval Hwnd As Long) As Long
Declare Function SetForegroundWindow Lib "user32" (Byval Hwnd As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (Byval ClassName As String, Byval lpWindowName As Long) As Long
'--- Klasse cWord Klasse mit Grundfunktionen
Class cWord
objWord As Variant
'Kontruktor - Prozedur
Sub New
Set objWord = Nothing
On Error Resume Next
Set objWord = GetObject("", "Word.Application")
If Err = 208 Then ' Fehler 208 tritt auf wenn Word noch nicht läuft
Err = 0
Set objWord = CreateObject("Word.Application")
objWord.Visible = True 'Word sichtbar machen
End If 'If Err = 208 Then
End Sub
'Destruktor-Prozedur
Sub Delete
Set objWord = Nothing
End Sub
'Beendet Word
Sub CloseWord
objWord.Quit 0
End Sub
'Bringt Word als Vollbild in den Vordergrund
Sub ActivateWord
Dim hWnd As Long
objWord.WindowState = 1 ' Application - Fenster auf Vollbild
hWnd = FindWindow("OPUSAPP", 0) 'Handle auf Wordfenster
If hWnd = 0 Then Exit Sub
Call SetActiveWindow(hWnd)
Call SetForegroundWindow(hWnd)
End Sub
'Neues Dokument auf Basis einer Vorlage erstellen. Name wird als Parameter übergeben.
Sub CreateNewDoc (strVorlage As String)
objWord.Documents.Add Rtrim$(strVorlage), False
End Sub
'Einfügen eines Textbausteins an einer Textmarke
Sub InsertAutoTextAtBM(strMarke As String, strTextbaustein As String)
objWord.ActiveDocument.Bookmarks(strMarke).Select ' Zu Textmarke springen
objWord.ActiveDocument.AttachedTemplate.AutoTextEntries(Cstr(strTextbaustein)).Insert(objWord.Selection.Range)
End Sub
...
Gruß
Norbert
-
vielen dank. genau das was ich gesucht habe ... Daumen hoch!
grüße
matze