Word - Dokument nach der Erstellung offen belassen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von jan99.

    Word - Dokument nach der Erstellung offen belassen

    Moin!

    ich werde mich nun nach und nach in die Word vb.net Thematik einarbeiten müssen und das sicherlich nicht ganz ohne Fragen.

    Hier mein erster Beispiel-Code:

    VB.NET-Quellcode

    1. ' create the application
    2. Dim objWord As Word.Application = New Word.Application
    3. objWord.Visible = True
    4. objWord.WindowState = Word.WdWindowState.wdWindowStateNormal
    5. ' create the document
    6. Dim objDoc As Word.Document = objWord.Documents.Add
    7. ' add paragraph
    8. Dim objPara As Word.Paragraph
    9. objPara = objDoc.Paragraphs.Add
    10. objPara.Range.Text = "hier steht mein erster Text 3"
    11. objDoc.SaveAs2("c:\\temp\\myworddoc.docx")
    12. objDoc.Close()
    13. objWord.Quit()


    Das Dokument wird erstellt, gespeichert und dann wird Word wieder geschlossen. Ein erstes Erfolgserlebnis also.

    Nun möchte ich aber, dass das Word Dokument am Ende offen bleibt und die Funktion beendet wird.

    VB.NET-Quellcode

    1. objDoc.Close()


    auszukommentieren hilft nicht weiter - ebenso wenig wie

    VB.NET-Quellcode

    1. Using objDoc As Word.Document = objWord.Documents.Add


    was mit folgender Anmerkung quittiert wird.


    Fehler 10 Ein Using-Operand vom Typ "Microsoft.Office.Interop.Word.Application" muss System.IDisposable implementieren.


    Kann mir jemand weiterhelfen?

    Gruß Jan
    Moin!

    also, wenn ich es richtig verstehe muss ich das Dokument unter irgendeinem Temp-Namen speichern. Dann den oben genannten Code beenden und am Ende Word wieder neu starten und das Dokument erneut öffnen???

    Das ist aber doof.

    Gruß Jan
    @jan99 Mit Process.Start(PFAD_NAME_DEINES_DOKUMENTS) kannst Du das Dokument mit Word öffnen lassen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    jan99 schrieb:

    Nun möchte ich aber, dass das Word Dokument am Ende offen bleibt und die Funktion beendet wird.
    Dann schließe weder das Dokument noch beende Word. Das machst Du aber mit

    VB.NET-Quellcode

    1. objDoc.Close()
    2. objWord.Quit()
    -> beide Zeilen weglassen
    Die Funktion wird beendet, wenn der letzte Befehl ausgeführt wird. Wo ist also das Problem? Das einzige, was ich noch sehe, ist, dass Du dann noch eine Referenz zu dem offenen Word-Dokument in einer Variablen ablegen musst, damit Du jederzeit drauf zugreifen kannst. Dazu eben objWord und objDoc nicht lokal in der Funktion defklarieren, sondern klassenweit, damit Du es eben auch zu einem späteren beliebigen Zeitpunkt wieder aufrufen, bearbeiten und schließen kannst.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Dann nochmal: Lass die Zeilen

    VB.NET-Quellcode

    1. objDoc.Close()
    2. objWord.Quit()
    weg!
    Die erste Zeile schließt das Dokument. Willst Du nicht. Also weg mit der Zeile.
    Die zweite Zeile schließt Word. Willst Du nicht. Also weg mit der Zeile.

    Als Zusatzinfo: Ja, ich hab's mit Deinem Code aus Post#1 ausprobiert. Musste den Pfad ändern, weil er nicht akzeptiert wurde. Ich hab die genannten Zeilen weggelassen, das Programm gestartet, das Word-Dokument erstellen lassen, meine Anwendung geschlossen, und OH WUNDER: Word und das Dokument blieben offen - ja warum auch nicht? Alles wie gewünscht von Dir.

    ##########

    Allerdings stand das auch schon in Kurzform in Post#2.

    jan99 schrieb:

    Nun möchte ich aber, dass das Word Dokument am Ende offen bleibt und die Funktion beendet wird.

    jan99 schrieb:

    Egal, ob die aufrufende Anwendung noch läuft oder nicht!
    Zwischen Funktionsende und Anwendungsende besteht ein riesiger Unterschied.

    jan99 schrieb:

    ebenso wenig wie
    Using objDoc As Word.Document = objWord.Documents.Add
    Dass das zu erstellende Objekt die IDisposable-Schnittstelle nicht implementiert, weißt Du ja schon. Wenn es das aber würde, würde ja genau das passieren, was Du nicht willst: Dass das Objekt automatisch geschlossen und zerstört wird.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()