» Poradna » Programy

VBA - Run-time error 91

 | Microsoft Windows 10 Firefox 61.0

Po dlouhé době zkusím poradnu i z druhé strany. Potřebuji jednoduchou funkci ve VBA, která mi otevře Excel, kde jsou dva sloupce, v prvním najde hledaný text a vrátí text z druhého sloupce. Nic složitého. Funkce funguje a vypadá takto:https://pastebin.com/vi9aM8nqProblém ale nastane, když ji volám opakovaně. Správně projde jen jednou, podruhé to skončí na tom, že nejde označit 1. sloupec. Celkově to bude k hromadné úpravě stovek výkresů v AutoCadu (2016 64bit), Excel je ve verzi 2013 32bit.Ve VBA jsem už asi 5 let nic nedělal, takže už mě nenapadá, co v kódu chybí nebo je tam blbě, že to nejde používat opakovaně. Tuším pouze, že se ten Excel nejspíš blbě zavře. Napadá někoho něco?

Mohlo by vás také zajímat

Odpovědi na otázku

 | Microsoft Windows 10 Chrome 69.0.3497.12

Před QUIT musíš dát ještě Save a Close toho excelu. Jinak ti zůstanou všechny excely otevřené.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 61.0

Ukládat to nepotřebuji. Zkusil jsem toto, ale končí to stále stejně (Err 91):Workbooks(soubor).Close SaveChanges:=Falseexapp.Quit

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Chrome 69.0.3497.12

Předpokládal jsem, že když něco přepisuješ, že to budeš chtít i uložit.Zkus si vzít "sešit", který hodí chybu a otevřít jej v Excelu. Co když ten soubor je divný?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 61.0

Ne, excel slouží jen jako zdroj dat. Podle něj se mění různá data na výkresech. Takže se ukládá jen výsledné DWG.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 61.0

Nechápu, co tam čaruješ s "Excel Application" a proč tak složitě otevíráš sešit, když to jde - podle mě - jednodušeji.Místo tvého kódu (8 řádků):Dim exapp As Excel.ApplicationDim wsheet As Excel.Worksheet...Set exapp = CreateObject("Excel.Application")exapp.Visible = Falsecesta = "C:\temp\"soubor = "text.xlsx"exapp.Workbooks.Open (cesta & soubor)Set wsheet = exapp.ActiveSheetpřece stačí tohle (4 řádky):Dim wkb As Workbook...cesta = "C:\temp\"soubor = "text.xlsx"Set wkb = Workbooks.Open(cesta & soubor)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 61.0

Jak už jsem psal, 5 let jsem to neviděl, takže se do toho zase dostávám. A i tehdy jsem v tom dělal jen okrajově. Ale díky, vypadá to, že to takto běhá, jak má. Takhle náhodou nevíš, jak přes VBA smazat z DWG jen některé revizní obláčky, které se dají identifikovat leda tak oblastí, kde se nachází?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 61.0

Ufff,.... DWG to jsou soubory z AutoCADu? Pokud ano, tak to nevím. A pokud ne, tak to nevím taky... Pořád ale tvrdím, že Excel umí všechno - teda s výjimkou vaření, praní a žehlení - a Google to potvrzuje, vypadá to, editace DWG souborů přes VBA funguje: https://forums.autodesk.com/t5/visual-basic-customiza...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 10 Firefox 61.0

Však ano, přes VBA umím v DWG upravit hromadu věcí (všechna ta DWG jsou vygenerovaná pomocí VBA), ale revizní obláček je definovaný jako soustava křivek, stejně jako třeba obdélník. U obdélníků se ještě člověk chytne třeba obsahu, ale u tohoto nesmyslu to asi bude větší oříšek. Excel k tomu mám jen čistě jako zdroj změn.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Firefox 61.0

Aha. Tak to teda fakt netuším. Asi bych zkusil nějaký CAD forum, jestli to vůbec nějak jde automatizovat.

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Run-time