Autor
|
Thema: VS Express - wie mehrere Excelversionen einbinden (1829 / mal gelesen)
|
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2537 Registriert: 02.10.2006
|
erstellt am: 11. Mrz. 2018 09:21 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe ein Projekt in VS Express 2017 erstellt. Mit dem Programm kann man 1 bis 8 Stoppuhren aktivieren und zwischen ihnen hin und her schalten, wie bei einer Schachuhr. Außerdem kann man ein Protokoll in Excel 2007 erstellen lassen. Das Programm funktioniert bei mir soweit ganz gut. Ich habe sowohl das Projekt als auch die Installation angehängt. Wenn ich aber die Installation auf einem Rechner mit einer anderen Excel-Version Installiere, gibt es beim Aufrufen von Excel eine Fehlermeldung. Im Programm habe ich einen Verweis zu Microsoft Excel 12.0 Object Library und Microsoft Office 12.0 Object Library erstellt. Für andere Versionen habe ich keinen Zugriff. Gibt es eine Vorgehensweise die Versionsunabhängig ist? Kann man nicht einfach die installierte Version auf dem jeweiligen Rechner aufrufen? Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2014 Plateia, Canalis Visual Basic
|
erstellt am: 11. Mrz. 2018 12:36 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo Andi, Das Stichwort ist hier Late Binding, dazu müßtest Du aber Dein Programm etwas umbauen Du darfst keine Verweise setzen sondern holst Dir diese erst später über das Objekt Anstelle von:
Code:
Dim xlApp As Excel.Application 'As Excel.Application Dim xlWb As Excel.Workbook 'As Excel.Workbook Dim xlWs As Excel.Worksheet 'As Excel.Worksheet xlApp = New Excel.Application() 'Excel öffnen
käme Code:
Dim xlApp As Object ' Excel.Application 'As Excel.Application Dim xlWb As Object ' Excel.Workbook 'As Excel.Workbook Dim xlWs As Object ' Excel.Worksheet 'As Excel.Worksheet xlApp = CreateObject("Excel.Application") ' New Excel.Application() 'Excel öffnen
Auch solltest Du keine Objektkonstanten verwenden: anstelle von : xlWs.Range("B" & n, "I" & n).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter 'mittig zentrieren müßte der Wert eingetragen werden (außer Du definierst Dir die Konstanten vorher selber): xlWs.Range("B" & n, "I" & n).HorizontalAlignment = -4108 'mittig zentrieren Sinnvollerweise ändert man das erst am Schluß damit man während des Programmierens Zugriff auf IntelliSense hat Oder man benutzt die bedingte Kompilierung:
Code: Dim bProg As Boolean bProg = False ' Programm fertig (True) / nicht fertig (False)#If bProg = False Then ' Entwicklungsphase Verweise gesetzt Dim xlApp As Excel.Application 'As Excel.Application Dim xlWb As Excel.Workbook 'As Excel.Workbook Dim xlWs As Excel.Worksheet 'As Excel.Worksheet #Else ' Auslieferversion, keine festen Verweise Dim xlApp As Object 'As Excel.Application Dim xlWb As Object 'As Excel.Workbook Dim xlWs As Object 'As Excel.Worksheet #End If xlApp = CreateObject("Excel.Application") ' kann für beide verwendet werden . . #If bProg = False Then ' Entwicklungsphase Verweise gesetzt xlWs.Range("B" & n, "I" & n).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter #Else ' Auslieferversion, keine festen Verweise xlWs.Range("B" & n, "I" & n).HorizontalAlignment = -4108 #End If
Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2537 Registriert: 02.10.2006
|
erstellt am: 11. Mrz. 2018 14:47 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, und besten Dank für deine Ausführungen. Ja Ja, der Fluch und Segen mit dem Late Binding. Ich habe deine Änderungen eingepflegt. Ich habe die beiden Verweise zu Excel und Office gelöscht und die entsprechenden Imports auskommentiert. Code: 'Imports Microsoft.Office.Interop 'Imports Microsoft.Office.Interop.Excel
Beim Testen innerhalb von VS Express läuft das Prg. noch und trägt wie gewünscht die Einträge in Excel ein. Aber, nach dem kompilieren bekomme ich eine Fehlermeldung beim drücken auf den Excelbutton. Siehe den Anhang. Also etwas fehlt noch, was zu Ändern ist. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2014 Plateia, Canalis Visual Basic
|
erstellt am: 12. Mrz. 2018 08:39 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Puh, da bin ich jetzt überfragt Kannst Du mal ein Set vor die Zuweisung schreiben. also Set xlApp = CreateObject("Excel.Application") Set xlWb = xlApp.Workbooks.Open(sPath) Set xlWs = xlWb.Worksheets(1) Grüße Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 778 Registriert: 18.05.2005 SolidWorks 2020 x64 SP3.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 21H1 Microsoft Office 365 ProPlus Microsoft Visual Studio Enterprise 2022
|
erstellt am: 12. Mrz. 2018 11:03 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo Andi Um alle Versionen von Excel abzudecken, würde ich entweder einen Wrapper (z.B. NetOffice) benutzen oder gleich alles mit OpenXML (z.B EPPlus) machen. Gruss Andreas ------------------ 21 ist nur die halbe Antwort.
[Diese Nachricht wurde von HenryV am 12. Mrz. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2537 Registriert: 02.10.2006
|
erstellt am: 13. Mrz. 2018 00:17 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von KlaK: Puh, da bin ich jetzt überfragt Kannst Du mal ein Set vor die Zuweisung schreiben. also Set xlApp = CreateObject("Excel.Application") Set xlWb = xlApp.Workbooks.Open(sPath) Set xlWs = xlWb.Worksheets(1)
Hallo Klaus, danke für deine Idee, aber diese geht leider nicht. Kommt ne Fehlermeldung "Let und Set werden nicht mehr Unterstützt". @Andreas Auch dir danke ich für deine Vorschläge, aber da stimmt Aufwand und Nutzen nicht überein. Ich habe ja ein funktionierendes Programm, aber mit dem Schönheitsfehler der Fixierung auf Excel 2007. Wenn ich im Büro die Office-Version verändere, müsste ich halt das Programm (Verweise) entsprechend anpassen.
Dieses Programm ist dann halt für User ohne Excel 2007 nur eingeschränkt Nutzbar, der Rest geht ja. Oder wer mag, kann es sich ja Anpassen. Es sei denn, der Fehler wird noch gefunden. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 778 Registriert: 18.05.2005 SolidWorks 2020 x64 SP3.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 21H1 Microsoft Office 365 ProPlus Microsoft Visual Studio Enterprise 2022
|
erstellt am: 14. Mrz. 2018 15:27 <-- editieren / zitieren --> Unities abgeben: Nur für Andi Beck
Hallo Andi Zumindest die Migration zu NetOffice sollte kein grosser Aufwand darstellen. (Ich habe 3 Minuten gebraucht.) Wie migriere ich meine Interop Assembly oder VBA Lösung zu NetOffice?
Zitat: Für Interop Lösungen: Ändern Sie die Referenzen sowie du using bzw Import Anweisungen. Fallweise müssen sie eine minimale Anpassung beim abbonieren von Events vornehmen. Marshal.ReleaseComObject Aufrufe ersetzen Sie durch den Auruf der Methode Dispose das ihnen jedes Objekt in NetOffice bietet oder löschen die entsprechende Codezeile da NetOffice alle COM Proxies für Sie verwaltet. Lesen zu dazu bitte die technische Dokumentation: COM Proxy Management verstehen.
Wenn du Zeit hast kannst du es einmal ausprobieren. - Sicherheitskopie vom Projekt erstellen - Verweise auf Excel und Office entfernen - NetOffice.Excel über den NuGet-Paket-Manager installieren - Imports setzen Imports Excel = NetOffice.ExcelApi Imports NetOffice.ExcelApi.Enums - Eventuelle Fehler korrigieren (In deinem Projekt war es einer.) Ich hänge mal das Projekt an. Damit es läuft, muss man zuerst auf die Projektmappe rechts klicken und "NuGet-Pakete wiederherstellen" auswählen. Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2537 Registriert: 02.10.2006
|
erstellt am: 14. Mrz. 2018 22:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Andreas, das scheint ja wirklich kein großer Aufwand zu sein. Und im Programmcode ist fast nichts verändert. Wer an deiner Version interessiert ist, greif nur zu. @all Ich bin jetzt etwas überrascht. Ich habe meine Version nochmals ausprobiert, und siehe da, auf einmal funktioniert die, so wie es sein soll. Obwohl ich nichts verändert habe. Nur Windows-Update ist inzwischen durch und natürlich neu gebootet. Verstehe wer will. Also bei mir unter Windows 7 und Excel 2007 funktioniert es. Mag wer bitte mal mit einer anderen Version testen? Mit dem Programm VS-Express 2017 bin ich auch noch nicht richtig zufrieden. Regelmäßig beim Debugging bekomme ich Fehlermeldungen, dass nicht ausgeführt werden kann etc.. Schließe ich das Programm und Starte erneut, geht es auf einmal wieder, tzzzz.
Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2537 Registriert: 02.10.2006 Firma: SW 2021-5.1 + PDM Prof. Windows 10 Pro 64bit, i9-11900 32 GbRAM, Quadro P2200 Home: SW 2021-5.1 Passungstabelle von Heinz Windows 11 Pro 64bit, i7-12700K, 32 GbRAM, GeForce GTX 1050Ti Samsung C34H892, 3440x1440 Pixel
|
erstellt am: 15. Mrz. 2018 07:48 <-- editieren / zitieren --> Unities abgeben:
Moin, komisch, wenn ich das Prg. starte, sind zu Hause die "Start" Buttons aktiv, im Geschäft aber deaktiviert. Die lassen sich erst aktivieren, wenn auf den jeweiligen "Reset" Button geglickt wird. Grüße, Andi ------------------ Hast du kein Problem? Such dir eins. ( Und löse es ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andi Beck Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 2537 Registriert: 02.10.2006
|
erstellt am: 15. Mrz. 2018 07:49 <-- editieren / zitieren --> Unities abgeben:
|