< návrat zpět
MS Excel
Téma: Makro nefunguje při spuštění shift+ctrl+pismeno
Zaslal/a Dingo 16.4.2013 11:12
Ahoj, potřebuju radu.
Když fungující makro spustím klávesovou zkratkou CRTL+SHIFT+písmeno, v průběhu makra se mi správně nezavře makrem otevřený dokument. Navíc ani žádná chybová hláška, zavřu dokument ručně a nic nepokračuje, jde to jako do ztracena. Ale stačí makro spustit jen CTRL+písmeno a funguje. Čím to asi je?
Více k tomu: makro cyklem nahrazuje jména. Otevře "banku_jmen", načte do pole, zavře, návrat k sešitu, kde bylo spuštěno, nahrazení. Chci ve více naráz otevřených sešitech pouštět stejné makro, nejlíp zkratkou. Když je stejný název makra a stejná kláv.zkratka, to nejde, po .close nenajde správně původní dokument, nahradí jinde. Zavrhnul jsem několik jiných možností, vyšlo mi nejlíp mít
v každém souboru stejné makro s jiným názvem a jinou kláv.zkratkou, tady jsem ale ztroskotal na tom problému se SHIFT. Nemám tolik volných zkratek jen s CTRL. Souborů, listů, jmen je moc moc.
V ukázce je potřeba otevřít jen soubory.xlsm, banku_jmen si otevírá makro.
Příloha: 12893_test.zip (224kB, staženo 23x)
Dingo(16.4.2013 11:34)#012894 edit: Excel 2007,2010. V jednom souboru v ukázce je chyba u zavírání souboru a makra zde mají shodná jména. Vývoj.verze.
citovat
eLCHa(16.4.2013 11:41)#012895 Zavrhnul jsem několik jiných možností, vyšlo mi nejlíp mít
v každém souboru stejné makro s jiným názvem a jinou kláv.zkratkou
Byla v tom i možnost vložit to makro do PERSONAL (nebo doplnku)? Stačila by jedna zkratka, popř. nabídka a v případě opravy by se opravovalo jediné místo
citovat
eLCHa(16.4.2013 11:44)#012896 Co znamená?
ActiveWorkbooks.Close
To makro by snad asi nemělo ani fungovat.
citovat
Dingo(16.4.2013 11:51)#012897 Zkusil jsem i Personal.xls, tam zase nevím, jak určit ten správný sešit z několika otevřených, kde to makro bude pracovat. A chtěl bych pokud možno řešení jen v rámci souborů, třeba daných na flash když jsem na cizím počítači (zaměst. a tak)
Ale jestli můžu požádat o způsob jak adresovat ten soubor z Personal ...
ActiveWorkbook.Close - to je ta chyba viz. 2.příspěvek
citovat
eLCHa(16.4.2013 11:57)#012898 ActiveWorkbook.Close - to je ta chyba viz. 2.příspěvek
Takže jsem ho zrovna trefil? ;))
Ale jestli můžu požádat o způsob jak adresovat ten soubor z Personal ...
Možností je více. Ale napadá mě
ActiveSheet
nebo ListBox se seznamem otevřených souborů
(
určit ten správný sešit z několika otevřených, kde to makro bude pracovat.)
a vybrat
citovat
Dingo(16.4.2013 12:11)#012902 Vybírat ze seznamu ten správný soubor. To by nemuselo být ani v Personal, ale i v tom makru v souboru. Ale do toho řešení se mi taky moc nechce, zvyknul jsem si na zkratku a neřešit nic okolo. Já už dýl dělal s každým souborem zvlášť, to je Ok, až když je mám všechny otevřené, je problém.
Já ještě zkusím automatické spuštění makra třeba double-clickem nebo po editac nějaké bunky na začátku listu, jestli se mi to podaří takto zprovoznit. Zatím asi dík za rady...
citovat
eLCHa(16.4.2013 12:21)#012906 Zatím asi dík za rady..
Zatím asi není zač ;)
citovat
Dingo(16.4.2013 21:54)#012934 Jen pro úplnost, zatím tedy nevím proč je chování makra závislé na tom, jak se spustí (jestli to je vůbec tím).
A potíž jsem vyřešil tak, že makro je stejné v každém souboru, včetně názvu a spouštím ho zavoláním po double-clicku na určité buňky v události sešitu. Takto mi to vyhovuje skvěle.
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Set prunik = Intersect(Target, Range("F1:I1"))
If prunik Is Nothing Then
GoTo Konec
Else
Dotaz = MsgBox("Nahradit jména?", vbYesNo, "Nahrazení")
Select Case Dotaz
Case vbNo
GoTo Konec
Case vbYes
Call zamena_jmen
End Select
Konec:
End If
Range("B2").Select
End Subcitovat