Excel 2007 > 2019, nefunkční část VBA kódu
Narazil jsem na problém. V jedné tabulce Excelu 2007 jsem měl (VBA) kód listu, který po otevření v Excelu 2019 nefunguje. Mám dvě podobné tabulky/aplikace, v jedné to jde, v druhé ne. Principiálně se mi to zdá skoro stejné, zkoušel jsem kód zkopírovat (a upravit podle místních podmínek), ale nechytl jsem se.
Řešil jsem úlohu, aby v buňce napsaný text "051119" byl chápán jako text "05.11.2019", s čímž pak dokážu později pracovat jako s datumem. Mám na to kód listu. Excelu 2007 mi to funguje v obou aplikacích, v Excelu 2019 jen v jedné.
Došlo ve VBA 2019 oproti 2007 k nějakým zásadním změnám?
Kód:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Chyba
Application.EnableEvents = False
If (Target.Column <> 4) Or Target.Row < 8 Or Target > 311299 Or Target < 10100 Then
Application.EnableEvents = True
Exit Sub
End If
If Mid(Target, 5, 1) > 4 Then
Stoleti = 19
Else: Stoleti = 20
End If
Target = Left(Target, 2) & "." & Mid(Target, 3, 2) & "." & Stoleti & Right(Target, 2)
Application.EnableEvents = True
Exit Sub
Chyba:
Application.EnableEvents = True
Exit Sub
End Sub
Chci, aby tahle změna, ta akceptace změny textu na datum, platila pouze ve 4. sloupci a od 8. řádku. Formát tohoto 4. sloupce je text.
Když vytvořím nový sešit a vložím do něj ten kód, tak to funguje. Když naprosto stejný kód mám ve stávajícím listu, VBA háže chybu:
No tak jsem na to přišel...
Na PC s Excelem 2019 chybí soubor kalendáře z verze 2007, tak jsem prostě natvrdo vytvořil potřebný adresář a nakopíroval to tam:
c:\Program Files (x86)\Microsoft Office\Office12\MSCAL.OCX
Nechápu, nerozumím... Instalaci Office 2019 jsem provedl jako úplnou.
Aha, oni od verze 2010 MSCAL.OCX nedodávají..
https://answers.microsoft.com/en-us/office/forum/officeversion_other-customize/missing-calendar-control/03ad5d05-ca3f-4081-9989-e757223ebdde?msgId=963b1785-3297-44d0-a880-f374c934b27c&page=1
https://social.msdn.microsoft.com/Forums/en-US/82af5d9e-0f72-4974-be10-b57747d390bc/calendar-control-for-all-office-application?forum=exceldev
No tak to by mě zajímalo, jak tohle obecně řešit (kromě prostého nakopírování chybějícího souboru).
Jojo, matně si vybavuju, že jsem se s tím taky kdysi potýkal. Excel mylně ukazuje chybu na řádku s funkcí MID, ale hlavní problém je v řádku
Už si moc nevzpomínám, jak jsem to přesně řešil, ale chce to použít nějakou konverzní funkci jako CDATE nebo něco podobnýho...
Mne celý kód funguje, v riadku, ktorý uvádza MachR55 mi neindikuje chybu a ani neviem, prečo by malo...
Mám Excel 2016
Já když jsem vytvořil nový excelový dokument a tam vložil tento kód, taky funguje. Ale nefunguje mi to v jednom starším.. Asi jsem tam nějak tehdy použil tu MSCAL.OCX a teď ji prostě vyžaduje.
Každopádně nakopírování té knihovny do PC zabralo.
Ale veď ty chceš prevádzať textový tvar na dátum, nie? Tak načo spomíname OCX? OCX je ovládací prvok kalendára, nie?
Já nevím, ale VBA v Excelu 2019 po napsání toho mého řetězce (např. 100620, dnešní datum) řvalo, viz ten screenshot. A následně hlásilo, že chybí MSCAL.OCX v konkrétním adresáři
Jako tady:
(je to španělsky, ale to je jedno, poukazuje to na chybějící *ocx
Možná to mám v té aplikaci nějak natvrdo "poručeno", už opravdu netuším...
Ahoj, musím souhlasit s Robertem, v kódu pracuješ "pouze" s textovým řetězcem, tak proč by měl být třeba ovládací prvek kalendáře ???
Kód testován na Excel 2007, 2016, 2019 - bez problému.
Píšeš, že na jednom stroji běhá kód bez problému a na druhém je zrada, jedná se o jeden soubor, který mezi stroji přenášíš? Nebo je na druhém stroji kopie onoho souboru?
Není možné, že by se v "nefunkčním" souboru nacházel zapomenutý ovládací prvek kalendáře?
Mně ten kód v novém souboru také funguje. Nefunguje pouze v jedné *xlsm aplikaci. V jiné, kde také používám tento postup, to funguje (vše v Excelu 2019). Mně v Excelu 2007 funguje vše, protože MSCAL.OCX je součásti instalace Office. Od 2010 už to tam prý není.
Je. Ale netuším, jak to zjistit a opravit.
Tiež ma napadlo, či niekde namá zabudovaný ovládací prvok kalendára.
L-Core skontroluj si súbor, či niekde v hárkoch toho súboru (možno aj v inom, než v ktorom zadávaš tie "dátumy") nie je použitý ovládací prvok ActiveX kalendára. Ten vyhodíš a malo by to byť ok.
Prekopírovaný kód je funkčný, pretože ním neprenášaš problematický ovládací prvok
Asi to mám:
Vyhodím to, co je zaškrtnuté, a funguje to (E 2007, E 2019 ještě vyzkouším).
Schválně zkuste (i siki), jestli by vám to fungovalo, jak to mám původně, dal jsem to na mega, odkaz máte v poště..
Tak jo, tohle je řešení. Vyhodit v Tools - References tu OCX knihovnu. A hned jsem v jiné své aplikaci našel něco podobného. Makra (v 2019, ve 2007 na mém PC OK) zase házely nesmyslné chyby, důsledek byl, že jsem tam měl zaškrtnutou knihovnu Adobe Acrobat 7.0 Browser Control Type Library 1.0. Odškrtnul jsem to - a funguje to tam i tam.
Uf.. a teď přemýšlet, kde se mi to tam v tom kódu vzalo
Otestováno na Excel 2007 a 2016 (Na 2019 se dostanu až za nějakou dobu, aktualizace W10 )
V obou případech Tebou popisovaná chyba a chybějící knihovna.
Po zrušení reference na chybějící knihovnu, kód probíhá bez chyby.
Někde se bude schovávat zapomenutý ovl. prvek
Zásielka hlásila chybu (Excel 2016)
Hárky som prešiel (skrytý hárok neobsahuje), dal si označiť objekty, ale problematický ovládací prvok som nenašiel.
Urobil som nasledovné:
označil som naraz všetky hárky, pravý klik na niektoré z označených ušiek, kópia do nového súboru, nový súbor uložiť.
A kód funguje...
Otázne je, prečo dochádza k chybe, keď existuje odvolávka na knižnicu ale kód sa nikde na prvok, ku ktorému by sa mala vzťahovať tá knižnica, neodvoláva...
L-Core, takže máš to týmpádom vyriešené?
Aha, to odstraní nepotřebné knihovny (tu MSCAL.OCX), když srovnám před a po.
Zajímavé řešení.
Ano, vyřešené.
Díky všem
On už tam asi schovaný není, ale během vývoje (17.10.2017) jsem tam něco s datumy zkoušel, pak to nepoužil a to zaškrtnutí už tam zůstalo dál. Protože mně i manželce to v Excelu 2007 fungovalo, nebyl důvod cokoliv tam hledat. Až teď, v 2019
Vývoj bol ale neskôr, než Excel 2016 a ono to už nešlo ani v 2016...
Ale hlavne, že je to už OK
Som rád
No já to dělal v Excelu 2007, nic novějšího jsem neměl. Až teď jsem manželce pořídil 2019 s tím, že časem také přejdu.