Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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.

Předmět Autor Datum
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…
L-Core 09.06.2020 10:09
L-Core
No tak jsem na to přišel... Na PC s Excelem 2019 chybí soubor kalendáře z verze 2007, tak jsem pros…
L-Core 09.06.2020 10:36
L-Core
Aha, oni od verze 2010 MSCAL.OCX nedodávají.. https://answers.microsoft.com/en-us/office/forum/offic…
L-Core 09.06.2020 11:33
L-Core
Jojo, matně si vybavuju, že jsem se s tím taky kdysi potýkal. Excel mylně ukazuje chybu na řádku s f…
MachR55 09.06.2020 11:53
MachR55
Mne celý kód funguje, v riadku, ktorý uvádza MachR55 mi neindikuje chybu a ani neviem, prečo by malo…
robert13 10.06.2020 07:30
robert13
Já když jsem vytvořil nový excelový dokument a tam vložil tento kód, taky funguje. Ale nefunguje mi…
L-Core 10.06.2020 08:50
L-Core
Ale veď ty chceš prevádzať textový tvar na dátum, nie? Tak načo spomíname OCX? OCX je ovládací prvok…
robert13 10.06.2020 09:28
robert13
Já nevím, ale VBA v Excelu 2019 po napsání toho mého řetězce (např. 100620, dnešní datum) řvalo, viz…
L-Core 10.06.2020 09:48
L-Core
Možná to mám v té aplikaci nějak natvrdo "poručeno", už opravdu netuším...
L-Core 10.06.2020 09:49
L-Core
Ahoj, musím souhlasit s Robertem, v kódu pracuješ "pouze" s textovým řetězcem, tak proč by měl být t…
Siki83 10.06.2020 10:03
Siki83
Mně ten kód v novém souboru také funguje. Nefunguje pouze v jedné *xlsm aplikaci. V jiné, kde také p…
L-Core 10.06.2020 10:20
L-Core
Tiež ma napadlo, či niekde namá zabudovaný ovládací prvok kalendára. L-Core skontroluj si súbor, či…
robert13 10.06.2020 10:28
robert13
Asi to mám: [90440-mscal-png] Vyhodím to, co je zaškrtnuté, a funguje to (E 2007, E 2019 ještě vyz…
L-Core 10.06.2020 10:34
L-Core
Tak jo, tohle je řešení. Vyhodit v Tools - References tu OCX knihovnu. A hned jsem v jiné své aplika…
L-Core 10.06.2020 10:54
L-Core
Otestováno na Excel 2007 a 2016 (Na 2019 se dostanu až za nějakou dobu, aktualizace W10 3-[) V obou…
Siki83 10.06.2020 10:58
Siki83
Zásielka hlásila chybu (Excel 2016) Hárky som prešiel (skrytý hárok neobsahuje), dal si označiť obje…
robert13 10.06.2020 11:19
robert13
Aha, to odstraní nepotřebné knihovny (tu MSCAL.OCX), když srovnám před a po. Zajímavé řešení.
L-Core 10.06.2020 11:25
L-Core
Ano, vyřešené. Díky všem :beer:
L-Core 10.06.2020 11:26
L-Core
On už tam asi schovaný není, ale během vývoje (17.10.2017) jsem tam něco s datumy zkoušel, pak to ne…
L-Core 10.06.2020 11:20
L-Core
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…
robert13 10.06.2020 11:26
robert13
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… poslední
L-Core 10.06.2020 12:09
L-Core

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.

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

Target = Left(Target, 2) & "." & Mid(Target, 3, 2) & "." & Stoleti & Right(Target, 2)

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...

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í.

Není možné, že by se v "nefunkčním" souboru nacházel zapomenutý ovládací prvek kalendáře?

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

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 :-D

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é?

Zpět do poradny Odpovědět na původní otázku Nahoru