Excel-Workbook lässt sich nicht mit VB.NET aktivieren

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ADB.

    Excel-Workbook lässt sich nicht mit VB.NET aktivieren

    ausgelagert aus VB.NET - Daten an Excel bei geöffneter Datei ~VaporiZed

    Guten Morgen.

    Vor einiger Zeit habe ich mit einem ähnlichen Code ein kleines Tool für mich programmiert.
    Es ging darum, Werte in eine bestehende Excel-Tabelle automatisiert einzutragen. Wegen der Corona-Zeit wurde das Tool gerade für einige Wochen nicht benötigt und somit auch nicht verwendet. Nun scheint das Tool nicht mehr auf die Excel-Datei zugreifen zu können, d.h. das Dokument ist zwar geöffnet, jedoch werden über die nachfolgende For-Each-Schleife keine Workbooks gefunden.

    Quellcode

    1. Imports Microsoft.Office.Interop.Excel
    2. Imports Microsoft.Office.Interop
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim ExcelApp As Application
    6. ExcelApp = CreateObject("excel.application")
    7. Dim wb As Excel.Workbook
    8. ExcelApp = CType(GetObject(, "Excel.Application"), Application)
    9. For Each w As Workbook In ExcelApp.Workbooks
    10. MsgBox(w.ToString)
    11. If w.Name = "Test.xlsx" Then
    12. wb = w
    13. wb.Activate()
    14. End If
    15. Next
    16. End Sub
    17. End Class


    Anbei noch kurz die Version von Excel und den Verweis auf die Interop.

    Kann jemand sagen, wo genau der Fehler liegt, dass mein Tool nicht mehr auf die Excel-Instanz zugreifen kann?

    Gruss & vielen Dank
    ADB

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

    Ich verwende auch Office'19, der Code klappt bei mir problemlos. Ich habe 2 Exceldateien geöffnet, fokussiere die falsche, lasse den Code laufen und die richtige Datei wird fokussiert.

    übrigens:
    bitte keine alten Problemthreads für Dein Problem kapern, sondern ggf. unter Verweis auf das alte Thema ein neues erstellen.

    Bilder solltest Du forenintern über [+ Erweiterte Antwort] -> _|Dateianhänge|_ -> [Hochladen] posten. Nicht wenige (Power)User hier klicken ungern auf ImageHosterLinks und stellen stattdessen die Hilfe hier im Thread ein bzw. fangen gar nicht erst mit Hilfe an. Deine Entscheidung.

    btw: bitte korrekte CodeTags verwenden
    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.
    Danke für deine Antwort und deine Hinweise. Werde mir diese zu Herzen nehmen... :)

    Kannst du mir verraten, wie es in deiner Verweis-Liste aussieht? Oder siehst du in meinen Verweisen (siehe letzten Beitrag) den Fehler?
    Was mir auffällt: Office19 hat als Versionsnummer die 16, nicht die 15. Ist da ne veraltete Bib verlinkt?
    Argh, sorry. Ich weiß grad nicht, wie ich auf Office 2019 komme. Welches Office nutzt Du? Ach, steht ja in Post#1.
    Bilder
    • Verweise.png

      9,82 kB, 1.182×154, 93 mal angesehen
    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.
    Das dachte ich auch, jedoch habe ich das Office nochmals deinstalliert und neu installiert. Trotzdem blieb die Version 15, obwohl im entsprechenden Ordner nach der Deinstallation vom Office die betreffenden DLLs verschwunden waren.
    Bei dir steht jedoch rechts im Link auch 15.0.0.0.

    Edit: Was mir gerade noch aufgefallen ist:
    Wenn ich dieselbe Verweise über "Hinzufügen" einfüge, sieht es schlussendlich bei mir betreffend Name und Versionsnummer nicht gleich aus. Muss ich dabei etwas beachten?
    Bilder
    • 2020-05-08 22_06_27-TestExcel - Microsoft Visual Studio Express 2012 für Windows Desktop.png

      35,64 kB, 1.238×332, 90 mal angesehen

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

    Wie verlinkst Du diese Office-Bibliotheken? Bei mir sind es COM-Bibs, bei Dir NET-Bibs.
    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.
    Ich arbeite auch viel mit Excel, allerdings über Epplus.
    Nun war ich aber interessiert und ich habe mir das Nuget Paket Microsoft.Office.Interop.Excel installiert!
    Den Code etwas angepasst:

    VB.NET-Quellcode

    1. Dim ExcelApp As Excel.Application
    2. Dim wb As Excel.Workbook
    3. ExcelApp = CType(Marshal.GetActiveObject("Excel.Application"), Application)
    4. For Each w As Workbook In ExcelApp.Workbooks
    5. MessageBox.Show(w.Name.ToString)
    6. If w.Name = "Test.xlsx" Then
    7. wb = w
    8. wb.Activate()
    9. End If
    10. Next


    Ich habe ein Excel-Workbook als Text.xlsx gespeichert und geöffnet, im Vordergrund dann ein anders WB geöffnet, Programm laufen lassen und siehe da, die im hintergrund laufende Tabelle wurde in den Vordergrund geholt.
    Nur wie gesagt, wenn ich schon direkt mit Excel arbeiten muss, dann nehme ich immer dieses Nuget Paket und nicht die Bibiotheken die mit Excel kommen.
    Die Verweise habe ich über "Verweise", "Hinzufügen", "Durchsuchen" und die Dateien vom Verzeichnis "C:\Windows\assembly\GAC_MSIL..." eingefügt.

    Nun habe ich jedoch über "Verweise", "Hinzufügen", "COM" die Dateien ausgewählt, die bei deinen Verweisen vorhanden sind. Bei mir sieht es nun gleich aus wie bei dir. Trotzdem wird das Workbook nicht in den Vordergrund gebracht.
    Müssen eigentlich die in meinem Screenshot (siehe Anhang) unten aufgelisteten Namespaces (bei "Importierte Namespaces") aktiviert werden? Es macht jedoch keinen Unterschied, ob ich sie aktiviere oder nicht.

    Wo könnte der Fehler sonst noch zu finden sein?

    @'Dksksm:
    Was bringt denn das Nugat Paket für Vorteile?
    Bilder
    • 2020-05-09 21_22_39-ExcelWorkbookInVordergrund - Microsoft Visual Studio Express 2012 für Windows De.png

      49,06 kB, 1.236×598, 79 mal angesehen
    • 2020-05-09 21_31_05-ExcelWorkbookInVordergrund - Microsoft Visual Studio Express 2012 für Windows De.png

      24,74 kB, 836×567, 80 mal angesehen
    • 2020-05-09 21_31_30-ExcelWorkbookInVordergrund - Microsoft Visual Studio Express 2012 für Windows De.png

      29,04 kB, 1.421×618, 71 mal angesehen
    • 2020-05-09 21_31_49-ExcelWorkbookInVordergrund - Microsoft Visual Studio Express 2012 für Windows De.png

      10,86 kB, 727×311, 84 mal angesehen
    Der Vorteil ist aus meiner Sicht, dass das Handling einfacher ist. Ich muss mich auch überhaupt nicht um die installierte Version von Excel kümmern.
    Tatsächlich habe ich vor ein paar Tagen mein Office 2016 deinstalliert und mir Office 365 installiert. Meine Werkzeuge laufen schmerzfrei weiter ohne dass ich irgendwelche Verweise neu machen müsste.
    Hallo Dksksm.

    Besten Dank für deine Rückmeldung. Das ist natürlich ein krasser Vorteil, von dem ich gerne profitieren möchte, denn das Tool sollte auch auf einem anderen Rechner noch laufen, auf dem nicht immer dieselbe Version installiert sein kann.
    Werde mich damit einmal auseinandersetzen.

    Bin ich mit dem nachfolgenden Link auf dem richtigen Weg?
    nuget.org/packages/Microsoft.Office.Interop.Excel/
    Beim Suchen über Google gab es folgenden Vorschlag:

    1. Rechtsklick auf das Projekt (Projektmappen-Explorer)
    2. "NuGet-Pakete verwalten" auswählen
    3. Über "Online" nach "Interop.excel" suchen

    In der Suche wurde "Microsoft.Office.Interop.Excel" aufgeführt, welches ich in der Version 15.0.4795.1000 installiert habe (siehe Anhang).

    Meinen Code habe ich durch den Code von Dksksm ersetzt. "Marshal" wurde rot markiert -> dafür musste "Imports System.Runtime.InteropServices" am Anfang des Codes eingefügt werden. Leider brachte auch diese Änderung das Tool nicht dazu, mir das gewünschte Excel-Dokument in den Vordergrund zu bringen, d.h. es scheint so, als würde es überhaupt keine Workbooks finden, da die gewünschte Messagebox nicht ausgegeben wird.

    Spielt evtl. Windows (Windows 10) oder das VS Studio (Microsoft Visual Studio Express 2012 Windows Desktop" noch eine Rolle?
    Bilder
    • 2020-05-10 10_31_31-ExcelWorkbookInVordergrund - NuGet-Pakete verwalten.png

      72,93 kB, 1.165×876, 92 mal angesehen