< návrat zpět

MS Excel


Téma: Kalendář MSCAL.ocx rss

Zaslal/a 9.1.2012 11:23

Ahoj,
ve svém sešitu používám pro zadávání datumu VBA kalendář z knihovny MSCAL.ocx. Pokud je sešit otevřen na PC, kde tato knihovna chybí, je zobrazena syst.hláška Microsoft Forms 'Nelze načíst objekt, protože na tomto počítači není dostupný.'.
Je možné tuto hlášku nějak nahradit mou vlastní s konstatováním, že kalendář na Vašem systému není dostupný, použijte ruční zadání?
Zkoušel jsem to pomocí On Error GoTo, ale nějak mi to nefunguje.
Děkuji Petr.

Zaslat odpověď >

#006917
avatar
Spustit z příkazového řadku unRegsvr32 C:\windows\system32\MSCAL.OCX
Kopirovat soubor z přílohy MSCAL.OCX do složky c:\windows\system32
Potom proved'te Regsvr32 C:\windows\system32\MSCAL.OCX
Pokuste přidat kalendář znovu.
Příloha: rar6917_mscal.rar (50kB, staženo 40x)
citovat
#006920
avatar
Já takové věci řeším následovně:


On Error Resume Next
gogol = Range("A1:A10").Find(What:="kokos").Row
If Not Err.Number = 0 Then
MsgBox "Nemáš kalendář, tak ti to nepojede"
End If
On Error GoTo 0

Samozřejmě místo řádku s hledáním (find) si můžeš dát volání toho kalendáře :-)citovat
#006930
avatar
Děkuji za Vaše odpovědi, ale...

Štučka: Vaše řešení, ač funkční, bohužel neřeší můj problém. Osobně zprovoznit kalendář umím také. Jde mi ale o to, aby tento sešit mohl spouštět na jakémkoliv systému/PC jakýkoliv 'PC negramot' a to i v případě, že dané PC (MSOffice) neobsahuje tento kalendář (pro chod programu není kalendář životně důležitý, jen zpříjemňuje obsluhu).

chipoun: Příkaz On Error tuto chybu/hlášku/oznámení nezachytí. Není to klasická run-time hláška od VBA.

Chtěl bych tuto hlášku obejít hned po načtení sešitu a rovnou odstranit ovládací prvek volající kalendář, ale nevím jak nekonfliktně zjistit ne/přítomnost kalendáře v systému.

Hláška:http://biker.pf.sweb.cz/alert.jpg[img]
#006940
avatar
Docela mne to zajímá, zda se Ti to podaří nějak elegantně vyřešit. Dovolím si pár poznámek.

Mohlo by stačit testovat existenci souboru a pak nahrát forms a pokud zhavaruje, pak jej nezobrazit.

Call ThisWorkbook.VBProject.VBComponents("Menu").Export("C:\WINDOWS\Temp\ee.bas")
With OutSesit
.Activate
'.VBProject.VBComponents.Add (vbext_ct_MSForm)
.VBProject.VBComponents.Import ("C:\WINDOWS\Temp\ee.bas")
End With

OCX objekty jsou ve VBA dostupné přes import např.
VBAEditor.References.AddFromFile "C:\Program Files\Common Files\system\ado\msado15.dll"

Pokud OCX dodáš s XLS pak stačí nahrát a používat. Nic méně to má podobnou podmínku.
Abys mohl nahrát pak potřebuješ ve VBA v References aktivovat doplněk M.S.Office Extensibility
Nevím na čem to přesně závisí. V některých PC nebyl aktivovány a pokud jsem otevřel sešit, pak se aktivoval. V jiných PC zase vyžadoval ruční zaškrtnutí v References.

To správné řešení je asi přes dynamickou alokaci - vytvoření instance.
Dynamicky zjistit, zda je COM registrovaný a pak :
- Test OCX
- LoadLibraryRegister
- GetProcAddressRegister apod.
Potom máš objekt v paměti pak jen jej svážeš s formsem a vykreslíš. To je ale na delší program (fuj).

Důvod je v tom, že když otevřeš XLS, pak je jedno co si nastavíš. VBA si zkontroluje makra a najde to co nezná. Pak zařve.
Kdybys použil externí deklaraci (pokud to jde) pak můžeš zkusit podmíněné zavedení. To ale vím, že jde s DLL. Nevím jak je na tom OCX.

To proto by mne zajímalo zda to nejde jinak. Občas by se mi to taky hodilo. R.citovat
#041574
avatar
Pokud se pokoušíte vyhledávat na webu, budete moci stáhnout váš chybějící soubor MSCAl.OCX. To je velmi vážný problém, ale je to řešení celého chybějícího souboru ocxcitovat
#041577
avatar
Pokud použijete On Error GoTo při vložení kalendáře za běhu pomocí OLEObjects.Add mohlo by fungovat ...

Set Calendar = ActiveSheet.OLEObjects.Add(ClassType:="MSCAL.Calendar.7", ...)
All versions are registered with the same class name, "MSCAL.Calendar.7", which is used to load the control as illustrated below.

Zkuste zda-li by nepomohlo:
https://www.experts-exchange.com/questions/23535646/Insert-Calendar-into-Excel.htmlcitovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse

Spustit makro v určitý čas

Baja • 28.11. 20:11

Spustit makro v určitý čas

elninoslov • 28.11. 17:09

Spustit makro v určitý čas

Baja • 28.11. 12:51

Spustit makro v určitý čas

elninoslov • 28.11. 0:31

Spustit makro v určitý čas

Baja • 27.11. 22:22

Spustit makro v určitý čas

Anonym • 27.11. 22:20

Spustit makro v určitý čas

elninoslov • 27.11. 21:11