habe das Problem, dass meine User verschiedene Versionen von Excel haben.
Die einen haben Excel XP und die anderen haben schon 2003 oder 2007. Mein
VBA Programm enthält eine UserForm mit einem Kalendersteuerelement.
Ich stellte fest, dass manche Rechner nach dem Start des Programms einfach
nach dem aktivieren der Makros abstürzten. Nach langem Suchen merkte ich,
dass es an den verschiedenen Versionen der mscal.ocx Datei lag.
Die eine Excel Version nutzte das Kalendersteuerelement 10.0 und die anderen
8. Also versuchte ich alle auf 8 umzustellen indem ich die entsprechende
Datei auf alle Rechner kopierte und dann den Verweis darauf setzte. Das
funktionierte aber nicht. Dann nahm ich eben die Version 10 und machte das
selbe Spiel wie vorher mit der 8er.
Das hat jetzt funktioniert. Aber nur eine Weile. Nach ca. 4 Wochen
funktioniert es jetzt teilweise nicht mehr. Das Programm stürzt nicht ab
aber beim Aufruf der Userform ist auf dem kalender keine Tageszahlen mehr
vorhanden.
Wie kann ich ereichen, dass auf allen Excel Versionen das entsprechende
Kalenderelement eingebunden wird??
Einen schönen Gruß
Ralf Dorn
vielleicht sollte ich noch erwähnen, dass sich die Datei auf einem
Netzlaufwerk und nicht lokal befindet.
Ralf Dorn
Ralf Dorn schrieb am 11.09.2008
> habe das Problem, dass meine User verschiedene Versionen von Excel haben.
> Die einen haben Excel XP und die anderen haben schon 2003 oder 2007. Mein
> VBA Programm enthält eine UserForm mit einem Kalendersteuerelement.
>
> Ich stellte fest, dass manche Rechner nach dem Start des Programms einfach
> nach dem aktivieren der Makros abstürzten. Nach langem Suchen merkte ich,
> dass es an den verschiedenen Versionen der mscal.ocx Datei lag.
>
> Die eine Excel Version nutzte das Kalendersteuerelement 10.0 und die anderen
> 8. Also versuchte ich alle auf 8 umzustellen indem ich die entsprechende
> Datei auf alle Rechner kopierte und dann den Verweis darauf setzte. Das
> funktionierte aber nicht. Dann nahm ich eben die Version 10 und machte das
> selbe Spiel wie vorher mit der 8er.
...dir ist bewusst, dass das u.U. lizenzrechtliche Probleme mit sich
bringen kann...?
> Wie kann ich ereichen, dass auf allen Excel Versionen das entsprechende
> Kalenderelement eingebunden wird??
Arbeite nicht mit einem 'harten' Verweis auf die Bibliothek sondern erzeuge
die Verbindung zur Laufzeit über 'late binding', dann wird die jeweils auf
dem Rechner registrierte Bibliothek verwendet.
Hier in paar Links zu diesem Thema:
http://support.microsoft.com/?scid=kb%3Bde%3B245115&x=16&y=11
http://support.microsoft.com/default.aspx?scid=kb;EN-US;247579
http://support.microsoft.com/?scid=kb;en-us;201710
http://word.mvps.org/faqs/interdev/EarlyvsLateBinding.htm
http://www.online-excel.de/excel/singsel_vba.php?f=41
Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-3]
Microsoft Excel - Die ExpertenTipps
Warum verwendest Du so alte Kalender-Controls, wenn es doch auf
2003/2007 zum Einsatz kommen soll?
8.0 ist Excel 97
10.0 ist Excel 2002
> Das hat jetzt funktioniert. Aber nur eine Weile. Nach ca. 4 Wochen
> funktioniert es jetzt teilweise nicht mehr. Das Programm stürzt nicht ab
> aber beim Aufruf der Userform ist auf dem kalender keine Tageszahlen mehr
> vorhanden.
Vielleicht ein Office- und/oder Windows-Update, dass alte Zustände
wieder hergestellt hat?
Hast Du mal probiert die neue Datei explizit zu registrieren?
regsvr32.exe E:\Excel\MSCAL.OCX
> Wie kann ich ereichen, dass auf allen Excel Versionen das entsprechende
> Kalenderelement eingebunden wird??
Mit einer korrekten Registrierung sollte das eigentlich automatisch
passieren. Zumindest mit den Versionen 9/10/11 klappt es bei mir
problemlos.
Peter
> http://support.microsoft.com/?scid=kb%3Bde%3B245115&x=16&y=11
> http://support.microsoft.com/default.aspx?scid=kb;EN-US;247579
> http://support.microsoft.com/?scid=kb;en-us;201710
> http://word.mvps.org/faqs/interdev/EarlyvsLateBinding.htm
ich verstehe die Beispiele nicht ganz. Hast du da mal ein Beispiel mit der
mscal.ocx? Lizenzrechtliche Probleme habe ich damit nicht. Wir haben alle
Lizenzen. Nur auf manchen PC's werden die Vorgängerversionen Gebraucht weil
sonst manche VBA teile nicht mehr funktionieren.
Kann ich nicht irgendwie die mscal.ocx im Ordner wo die Excel Datei liegt
hinterlegen und dann beim Start diese immer mit einbinden oder so etwas
ähnliches.
Beim Workbook_Open Ereigniss mit shell("regsvr32.exe c:\excel\mscal.ocx")
die richtige einbinden? Und natürlich vorher mit regsvr32.exe /u mscal.ocx
die Alte entfernen?
Schönen Feierabend
Ralf Dorn
> Hast Du mal probiert die neue Datei explizit zu registrieren?
>
> regsvr32.exe E:\Excel\MSCAL.OCX
>
Deine Idee finde ich ganz gut. Aber es sind viele Rechner und es kommt auch
manchmal ein neuer hinzu. Daher wäre mir eine Möglichkeit beim Aufruf der
Excel Datei lieber.
Werde eine Kobination aus deinem Vorschlag und meinen Gedanken morgen
ausprobieren ;-)
Gruß
Ralf
Dann bitte doch deinen Netzwerk-Admin den Registrierungsbefehl is
Logon-Script zu packen. Ist zwar unüblich regsvr32.exe bei jeder
Anmeldung auszuführen, weil man es ja eigentlich nur einmal machen
muss, aber immer noch besser als im Workbook_Open.
Peter
Ralf Dorn schrieb am 11.09.2008
> Hallo Thomas,
>
>> http://support.microsoft.com/?scid=kb%3Bde%3B245115&x=16&y=11
>> http://support.microsoft.com/default.aspx?scid=kb;EN-US;247579
>> http://support.microsoft.com/?scid=kb;en-us;201710
>> http://word.mvps.org/faqs/interdev/EarlyvsLateBinding.htm
>
> ich verstehe die Beispiele nicht ganz.
Dann wirds aber Zeit, dich mit der Thematik zu befassen... ;-)
> Hast du da mal ein Beispiel mit der mscal.ocx?
Da muss ich mich auch erst reinarbeiten - es ging mehr ums Prinzip denn die
konkrete Umsetzung, zumal wir auch deinen Code nicht kennen.
> Lizenzrechtliche Probleme habe ich damit nicht.
> Wir haben alle Lizenzen.
OK das kann ich nicht beurteilen.
> Kann ich nicht irgendwie die mscal.ocx im Ordner wo die Excel Datei liegt
> hinterlegen und dann beim Start diese immer mit einbinden oder so etwas
> ähnliches.
Mit 'late binding' ist das nicht notwendig, da dann immer die auf dem
Rechner gerade registrierte Version verwendet wird.
> Beim Workbook_Open Ereigniss mit shell("regsvr32.exe c:\excel\mscal.ocx")
> die richtige einbinden? Und natürlich vorher mit regsvr32.exe /u mscal.ocx
> die Alte entfernen?
Das scheint mir dann mit Kanonen auf Spatzen geschossen - dann schon eher
eine selbstgebaute Userform für die Auswahl des Datums die dem
Kalendersteuerelement nachempfunden ist. Das könne/dürfe deine Probleme
nachhaltiger lösen wenn eine derartige Vielfalt an Installtionen vorhanden
ist.
danke für den Tipp. Da unser Admin so etwas bestimmt nicht machen wird,
werde ich einfach ein Makro schreiben, dieses dann mit einer Tastenkombi
starten. Das mache ich dann nur wenn ich sehe, dass der PC die falsche
mscal.ocx hat.
> Das scheint mir dann mit Kanonen auf Spatzen geschossen - dann schon eher
> eine selbstgebaute Userform für die Auswahl des Datums die dem
> Kalendersteuerelement nachempfunden ist. Das könne/dürfe deine Probleme
> nachhaltiger lösen wenn eine derartige Vielfalt an Installtionen vorhanden
> ist.
ok, danke für deine Hilfe. Werde es wie weiter unten beim Peter geantwortet
machen. Ich denke, das ist eine einigermaßen akzeptable Lösung.
Dann willst Du also jedesmal warten, bis die Anwednung nicht mehr
funktioniert oder sogar der Rechner abstürzt? tsss, tsss, tsss
Außerdem ist fraglich, ob es direkt helfen wird. Auch mit late-binding
ist das fraglich. AFAIK verwendet Excel die Calendar-Version, die zum
Zeitpunkt des Excel-Starts registiert war und _nicht_ zum Zeitpunkt
des Ladens der Mappe. Du müsstest also Excel neu starten.
Alternativ zum Logon-Script, könntest Du auch auf jedem Rechner ein
VB-Script in den Autostart-Ordner legen oder über eine der anderen
bekannten AutoRun-Methoden starten. Muss der Admin ja nicht wissen ;-)
'/mscal.vbs/
'--------------------------------------------------
Set shell = WScript.CreateObject("WScript.Shell")
shell.Run "regsvr32.exe /s E:\Excel\MSCAL.OCX", 0
Vielleicht noch zwei Anmerkungen zu Registrierung:
1. Du brauchst nicht un-registrieren (Schalter /u) Der alte Kalender
wird automatisch rausgeschmissen, wenn ein neuer registriert wird.
2. Silent-Modus um die Rückmeldung zu unterdrücken (Schalter /s)
Peter
On 12 Sep., 10:05, Peter Schleif <peter.schleif.s...@gmx.de> wrote:
>
> > danke für den Tipp. Da unser Admin so etwas bestimmt nicht machen wird,
> > werde ich einfach ein Makro schreiben, dieses dann mit einer Tastenkombi
> > starten. Das mache ich dann nur wenn ich sehe, dass der PC die falsche
> > mscal.ocx hat.
>
> Außerdem ist fraglich, ob es direkt helfen wird. Auch mit late-binding
> ist das fraglich. AFAIK verwendet Excel die Calendar-Version, die zum
> Zeitpunkt des Excel-Starts registiert war und _nicht_ zum Zeitpunkt
> des Ladens der Mappe. Du müsstest also Excel neu starten.
Late Binding mit OCX-Komponenten klappt nicht, da war ich auf dem
falschen Dampfer - sorry.
Daher plädiere ich für eine eigene Userform (es gibt da auch
'vorgefertigte Produkte'), die ganz einfach mit der Mappe mitgeführt
wird.
Das erübrigt dann alle Versions-Konflikte, da alles in der Mappe liegt
und man nicht mehr auf installierte, fehlende oder falsche Komponenten
prüfen muss.
Gerade in diesem gemischen Umfeld scheint mir das längerfristig die
weniger stressige Lösung zu sein.
Alternativen die sich anbieten wären das Monthview-Steurelement
(http://msdn.microsoft.com/en-us/library/aa733656(VS.60).aspx)
--
Mit freundlichen Grüssen
Thomas Ramel
- MVP für MS-Excel -