Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Verweise (Excel, Outlook) automatisch von 16.0 auf 14.0 object library setzen

Begonnen von Ken, Oktober 18, 2016, 17:46:09

⏪ vorheriges - nächstes ⏩

Ken

Hallo,

ich arbeite mit zwei verschiedenen Office-Versionen (zwei Rechner) und jedesmal wenn ich mit dem Office 14 die DB starte, gehen mir die zwei Verweise von Excel und Outlook verloren. Office 16 überschreibt Excel und Outlook 14.0 Object Library mit 16 und beim öffnen von Office 14 steht unter Verweise das die Excel und Outlook 16.0 Object Library nicht vorhanden sind.

Frage:
Gibt es eine Möglichkeit per VBA abzufragen welche Office Version gerade die Access DB gestartet hat und dementsprechend den richtigen Verweis (Excel und Outlook 14.0 oder 16.0) zu setzen?
Ich weiß man kann es auch per Hand ändern, aber das nervt mit der Zeit. Wäre für jede Idee sehr dankbar!

Gruss
Ken
Gruß
Ken


Office 2010

markusxy

Normalerweise sollten die Verweise doch nach dem ersten händischen ändern erhalten bleiben.
Kopierst du die Anwendung immer zwischen den Rechnern hin und her, oder verwendest du die DB auf einem portablen Speicher?

Grundsätzlich wird empfohlen Late Binding zu verwenden, sofern der Code das zulässt. Hast du diese Option schon erwogen?

LG Markus

Ken

Die Anwendung ist auf einem Server, also nicht auf einem der beiden Rechnern. Wenn 14.0 "aktiviert" ist und ich mit Office 16 arbeite, stellt Access es automatisch auf 16.0 um, aber leider nicht auf 14.0 wenn ich dann mit dem anderen Rechner das Programm starte.
Gruß
Ken


Office 2010

markusxy

Nachmal mein Nachtrag von vorhin.

Grundsätzlich wird empfohlen Late Binding zu verwenden, sofern der Code das zulässt. Hast du diese Option schon erwogen?

LG Markus

Ken

Sorry deine letzte Frage habe ich übersehen.
Nein Late Binding habe ich nicht verwendet. Da müsste ich mich dann einlesen wenn du sagst damit lässt sich das Problem lösen.
Gruß
Ken


Office 2010

markusxy

Offensichtlich ist die DB nicht in Front- und Backend aufgeteilt.
Ich meine, damit wäre das Problem auch gelöst. Dann hat halt jeder Rechner sein Frontend und nur die Daten bleiben am Server. Bei einer Änderung im Frontend hast natürlich wieder etwas mehr Arbeit.

LG Markus

Ken

Richtig, sie ist nicht aufgeteilt.
Habe gerade mal nachgelesen...für Late Binding braucht es nicht viel Änderungen wenn ich das richtig verstanden habe:

z.B.
Dim xlApp As Object statt Excel.Application
Dim xlSheet As Object statt Excel.Worksheet
Gruß
Ken


Office 2010

Ken

Ich dachte mir nur, dass vielleicht noch jemand so ein Problem hat und statt den gesamten Code umzuschreiben eine Abfrage welche Version und dementsprechen die Verweise zu setzen etc. einfacher wäre.
Gruß
Ken


Office 2010

Beaker s.a.

Hallo Ken,
Abgesehen von Markus' Hinweis bezügl. FE/BE Trennung, kannst du die Verweise
über die Application.References auslesen und setzen.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

markusxy

Zitat von: Ken am Oktober 18, 2016, 18:48:33
Ich dachte mir nur, dass vielleicht noch jemand so ein Problem hat und statt den gesamten Code umzuschreiben eine Abfrage welche Version und dementsprechen die Verweise zu setzen etc. einfacher wäre.

Vom Prinzip her natürlich möglich, solange man keine accde Version einsetzt.
Habs aber selbst so nicht im Einsatz.
Die Schritte die mMn nötig sind.
1. Alle betroffenen Verweise werden erst zur Laufzeit gesetzt und zum Programmende wieder gelöscht.
2. das automatische kompilieren zum Programmstart muss deaktiviert sein.

Beide Punkte führen ansonsten zu einer Lawine an Fehlermeldungen.
Zu beiden Themen findest du im Web Infos, oder andere können dir da weiterhelfen.
Sollte das Programm abstürzen, und du dadurch die Verweise nicht löschen kannst, hast halt die Fehlermeldungen.
LG Markus

Ken

Gruß
Ken


Office 2010

MaggieMay

Hallo,

mit dem Einsatz von Late Binding bist du auf Dauer unabhängig von der Office-Version und vielleicht möchtest du das Programm ja auch noch in fünf Jahren oder mehr nutzen. Da es sich mit Excel und Outlook ja ebenfalls um Office-Produkte handelt, ist dies auch kein großer Akt, die Objektkataloge sind ja verfügbar, die Methoden und Eigenschaften der Objekte müssen nicht mühsam erforscht werden.
Es ist dabei durchaus empfehlenswert, den diesbezüglichen Code mit Early Binding zu erstellen und erst wenn alles fertig und ausgetestet ist, auf Late Binding umzustellen. Zu beachten ist dabei nur noch, dass etwaige Konstanten nicht verfügbar sind und innerhalb der Access-Anwendung deklariert werden müssen - was ich für sinnvoller halte als Direktwerte zu verwenden, die keiner versteht.

PS:1. Alle betroffenen Verweise werden erst zur Laufzeit gesetzt und zum Programmende wieder gelöscht.Das muss nicht zwingend so sein, man kann sie prüfen und nur bei Bedarf handeln. Dazu kann man die jeweils vorhandene Office-Version aus der Registry auslesen. Insgesamt ist der Programmieraufwand, sofern Neuland, nicht unerheblich und wie gesagt nicht unbedingt (je nach Vorgehensweise) etwas für die Ewigkeit.
Freundliche Grüße
MaggieMay

Ken

Ich dachte nur es wäre kein grosser Aufwand, weil ich ein "Stück Code" im Netz gefunden habe, wo die Microsoft Office 14.0 oder 16.0 Object Library automatisch angepasst werden. Das funktioniert sehr gut...nur halt nicht mit Excel bzw. Outlook 14.0 bzw. 16.0

Aber ich habe wieder etwas dazu gelernt. Danke an alle die mir bei diesem Thema geholfen haben.
Gruß
Ken


Office 2010

MaggieMay

Zeig doch bitte mal den Code, der sollte sich doch leicht anpassen lassen.
Freundliche Grüße
MaggieMay

Ken

Gruß
Ken


Office 2010