Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  VBasic / vb.net / vbs / wsh
  VS Express - wie mehrere Excelversionen einbinden

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  VS Express - wie mehrere Excelversionen einbinden (1783 mal gelesen)
Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2537
Registriert: 02.10.2006

erstellt am: 11. Mrz. 2018 09:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


ChangeStopwatch-01.JPG


prj-ChangeStopwatch-1.0.0.0.zip


Install-ChangeStopwatch-1.0.0.0.zip

 
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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2537
Registriert: 02.10.2006

erstellt am: 11. Mrz. 2018 14:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Fehlermeldung-Excel.JPG


Fehlermeldung-Excel.txt

 
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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2537
Registriert: 02.10.2006

erstellt am: 13. Mrz. 2018 00:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andi Beck 10 Unities + Antwort hilfreich


prj-ChangeStopwatch-NetOffice.zip

 
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



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2537
Registriert: 02.10.2006

erstellt am: 14. Mrz. 2018 22:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Install-ChangeStopwatch-1.0.0.1.zip

 
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



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Andi Beck an!   Senden Sie eine Private Message an Andi Beck  Schreiben Sie einen Gästebucheintrag für Andi Beck

Beiträge: 2537
Registriert: 02.10.2006

erstellt am: 15. Mrz. 2018 07:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

doppelpost

[Diese Nachricht wurde von Andi Beck am 15. Mrz. 2018 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz