VB2013: Exel (Nullreference), Binarie lässt sich auf anderem Computer nicht starten

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Dksksm.

    VB2013: Exel (Nullreference), Binarie lässt sich auf anderem Computer nicht starten

    Schön guten Tag,

    ich habe mir VS2013 gekauft, nachdem ich mit VS2010 Express gute Arbeiten die ich mit Delphi auch zu Beginn erzielte auch schafte. Meine Delphikentnisse sind leider auch mittlerweile nach 4 Jahren eingestaubt. Ich habe dort mit der Personal Edition programmiert, den Binarie durfte ich aber nicht freigeben. Dies sah in VS2010 Express anders aus. Nun entschloss ich mich Systemnah zu Programmieren. Auch habe ich mit VS2013 Pro und Windows 8.1 Pro erworben. Office nutze ich hingegen in der office 365 Fassung (wegen Updates)

    Mein erstes Problem bestand darin, das ich immer wieder eine Nullreferenz bei der Erstellung eines Worksheet erhielt, als ich es zu Object deklarierte, lief die Anwendung an. Ich finde negativ, das mir die Membereigenschaften und -methoden nicht mehr dargestellt werden, weil dies mir doch die Arbeit von dem Suchen her erleichtert, da ich noch kein Routinierter Nutzer bin.

    Ich habe in Proejkte->Verweise das Häckchen bei Microsoft.Office.Interop.Excel in der Version 15.0.0.0

    Nun wenn ich folgenden Source kompiliere funktioniert dieser auf meiner Maschine wunderbar.

    Auf einer Maschine wo Windows 7 und Office 14 (2010) läuft geht dieser nicht. Nun meine Idee war, vielleicht liegt es ja am Office. Aber ich kann doch nicht Office 2003 installieren weil ich dafür keine Lizenz habe. Der Windows 7 PC wird von meiner Bildungseinrichtung administriert, da ich derzeit eine Umschulung zum IT-Kaufmann mache. Auf dem Computer erscheint, das das Programm nicht mehr funktioniert, es gibt die möglichkeit das Programm zu schließen. Liegt das nun wirklich am Excel oder mache ich was falsch?

    Meine Anwendung erstellt derzeit das kleine 1mal1. Es ist sinnlos, es sollte nur die Funktionalität zeigen. Später soll nur gelesen werden, von mehren Dateien aber bis dahin, scheint eine Anpassung nötigt zu sein, damit erstmal eine Datei richtig funktioniert.

    Ich hoffe mir kann man helfen, da ich den Fehler nicht finde bzw. eine Korrekte Einstellung/Einrichtung korrekt läuft.

    So hier nun die Form-Klasse

    VB.NET-Quellcode

    1. Imports Excel = Microsoft.Office.Interop.Excel
    2. Public Class Form1
    3. Private objXls As New Excel.Application
    4. Private xlsWS As New Object
    5. Public Sub StartExcel(ByVal Path As String)
    6. objXls.Visible = False
    7. objXls.Workbooks.Open(Path)
    8. xlsWS = objXls.ActiveSheet
    9. End Sub
    10. Private Sub DoSomething()
    11. xlsWS = objXls.ActiveSheet
    12. For n = 1 To 10
    13. For i = 1 To 10
    14. xlsWS.Cells(n, i).value = n * i
    15. Debug.Print((n * i))
    16. Next i
    17. Next n
    18. GetAllTabs()
    19. End Sub
    20. Private Sub GetAllTabs()
    21. For Each ws As Excel.Worksheet In objXls.Sheets
    22. Debug.Print(ws.Name)
    23. Next
    24. End Sub
    25. Public Sub CloseExcel()
    26. objXls.ActiveWorkbook.Save() 'Speichert die aktuellen Änderungen
    27. objXls.ActiveWorkbook.Close() 'Schließt die Arbeitsmappe
    28. objXls.DisplayAlerts = False
    29. objXls.Quit()
    30. End Sub
    31. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    32. OpenFileDialog1.ShowDialog()
    33. StartExcel(OpenFileDialog1.FileName)
    34. DoSomething()
    35. CloseExcel()
    36. End Sub
    37. End Class


    Liebe Grüße
    dlosse
    Sieht so aus dem Kopf ganz gut aus.
    Es wird wohl am Excel liegen.
    Du verwendest eine Version, die auf dem anderen PC nicht vorhanden ist.

    Du könntest alternativ die OpenOffice Lib benutzen. Die darfst du meine ich weitergeben.
    Dabei kann ich dir aber leider nicht helfen, da ich diese noch nicht benutzt habe.
    Wenn auf dem anderen Rechner ein Excel installiert ist, das nicht zu deinem passt, kannst du auch mit Late Binding arbeiten.
    Anstatt Private objXls As New Excel.Application kannst du in diesem Fall Dim objXls = CreateObject("Excel.Application") verwenden und benötigst keine Referenz.

    Aber Achtung:
    Das ist "Option Strict Off"-Code.
    Du solltest da relativ genau wissen, was du tust.
    Am besten solchen Code in eine eigene Klasse auslagern und den Rest des Projektes "Strict On" lassen.

    Im schlimmsten Fall bekommst du da ein Excel2000 untergejubelt.
    Dein Code sollte also mit allen bisherigen Excel Versionen kompatibel sein.
    Notfalls objXls.Version auswerten und ggf. sauber abbrechen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    In VB kann die Warnkonfiguration für das späte Binden auch separat gesetzt werden. Dann ist es zwar kein "Option Strict" = On mehr, sondern "Benutzerdefiniert" aber immer noch besser als Off.
    Das von mir empfohlene NetOffice ist ein Wrapper für MS Office Programme und wird auf der verlinkten Seite auch beschrieben. Das "Warum NetOffice" wird hier beschrieben.

    Im schlimmsten Fall hat der Rechner auf dem das Programm installiert wird gar kein MS Office Programm (Excel) installiert. Natürlich muss und kann man das abfangen.