Word-Dokument im Vordergrund öffnen mit ClickOnce-kompiliertem VB-Programm in Visual Basic 2010 Express

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Rainman.

    Word-Dokument im Vordergrund öffnen mit ClickOnce-kompiliertem VB-Programm in Visual Basic 2010 Express

    Hallo zusammen,

    ich habe in Microsoft Visual Basic 2010 Express eine Prozedur geschrieben, um von einem Formular aus per Command Button eine Word-Dateien zu öffnen.
    Im Editor klappt das wunderbar. Wenn ich jedoch das Programm mit der ClickOnce-Installation kompiliere und installiere, werden die Dokumente und Word immer hinter dem Visual Basic-Formular geöffnet anstatt davor. :/
    Wie kann ich das ändern? Was ist hier der Fehler? ?(

    Hier ist der Code:

    Visual Basic-Quellcode

    1. Private Sub oeffne_Word(Dateiname As String)
    2. Dim Word
    3. Word = CreateObject("Word.Application")
    4. Word.WindowState = 1
    5. Word.Visible = True
    6. Word.Documents.Open(Dateiname, , False)
    7. End Sub

    Mein System ist Windows 7 SP1 64-Bit Deutsch

    Viele Grüße
    @Spaceworld Productions Willkommen im Forum.
    Probier mal dies:

    VB.NET-Quellcode

    1. Process.Start(Dateiname)
    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!
    Stichwort ist: Microsoft.Office.Interop.Word, siehe auch das Beispiel aus #2.

    Die in #1 gezeigte Technik funktioniert zwar noch, ist aber noch aus VB6-Zeiten und sollte verschwinden, weil man es heute anders umsetzt.
    Ich habe mir schnell eine ClickOnce-Anwendung erzeugt. Word verschwindet hier nicht hinter der VB-Anwendung. Das löst somit dein Problem.
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!
    Vielen Dank für die schnellen Rückmeldungen.

    Das mit dem Process.Start(Dateiname) aus #3 funktioniert tatsächlich auch mit der ClickOnce-Anwendung, was ich vorerst eingebaut habe. :thumbup:

    Der Hinweis mit dem Beispiel aus #2 und #4 klingt sehr interessant und lässt sich auch weiter ausbauen. Ich habe den Code aus dem Link zum Testen eingebaut: Nach der Installation unter ClickOnce öffnete sich bei mir leider das Word-Dokument wieder im Hintergrund, wenn ich alle Office-Anwendungen und den Visual Basic Editor vor dem Öffnen geschlossen hatte.
    Dennoch würde ich ihn gerne einmal richtig verwenden. Lässt sich Microsoft.Office.Interop.Word auch verwenden, wenn man nicht weiß, welche Office-Version auf dem Zielrechner installiert ist?

    @Rainman: Hattest Du wirklich alle Office-Anwendungen und den Visual Basic Editor vor dem Öffnen der OneClick-Anwendung geschlossen? Irgendetwas scheint bei mir da noch anders zu reagieren. Würde es gerne damit auch schaffen.
    Lass mal folgenden Code laufen. Im Projekt vorher noch Microsoft.Office.Interop.Word als Verweis einbinden.
    Ich nutze aktuell VS 2012 und Office 2010. Ob irgendwelche anderen Kombinationen nicht laufen oder Probleme bereiten, weiß ich leider nicht.

    VB.NET-Quellcode

    1. Imports Microsoft.Office.Interop
    2. Imports Microsoft.Office.Interop.Word
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. BerichtAlsWordDokument()
    6. End Sub
    7. Private Sub BerichtAlsWordDokument()
    8. ' Ein Word-Application Objekt anlegen.
    9. Dim wordapp As New Word.Application
    10. If wordapp Is Nothing Then
    11. MessageBox.Show("Keine Verbindung zu Word.")
    12. Exit Sub
    13. End If
    14. ' Ein leeres Dokument hinzufügen.
    15. wordapp.Documents.Add()
    16. wordapp.ActiveDocument.PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape
    17. With wordapp
    18. .ActiveWindow.ActivePane.View.SeekView = Word.WdSeekView.wdSeekMainDocument ' Den Textbereich auswählen.
    19. .Selection.TypeText("Hallo")
    20. End With
    21. ' Word sichtbar machen. Standard ist "unsichtbar". So kann man z.B. via Word drucken ohne Word anzuzeigen.
    22. wordapp.Visible = True
    23. ' Dokumentenschreibschutz setzen. Der Text ist dann vorerst nicht mehr editierbar.
    24. wordapp.ActiveDocument.Protect(WdProtectionType.wdAllowOnlyReading)
    25. End Sub
    26. End Class

    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!