Office 2000 - Chyba v BuiltinDocumentProperties
Pracuji na projektu který transformuje data z aplikace MS Word do sešitu MS Excel. Projekt jako takový funguje již několik let a doplňují se do něj pouze nové funkce a opravuji chyby. Při zpracování jednoho z tisíce dokumentů jsme začli dostávat podivné chyby pocházející z C++ - ony známe chyby s chybovým kódem např. -2147417851, které nikdy nic nikomu neřeknou. Velice podrobným zkoumáním jsem přišel na zvláští chování objektu BuiltInDocumentProperties, který pro specifické zadání dat zcela skrytě a bez chybové hlášky zničí instanci třídy aplikace MS Excel!
Celý kód je spouštěn z šablony MS Word kde je vytvořena instance třídy MS Excel a poté, se z dokumentu MS Word transformují data do aplikace MS Excel a zároveň se využívá objektu BuiltInDocumentProperties kde se - např. zde do kolonky Author - zapisují souhrné informace z dokumentu. Vše funguje perfektně až do doby, kdy se pokouším zapsat data do kolonky Author, které mají počet znaků od 252 do 255.
objWkb.BuiltInDocumentProperties("Author") = strText
Při této délce znaků dochází k zcela skrýtému zničení třídy aplikace MS Excel a chyba se pak projeví až při prvním dalším pokusu o práci s instanci třídy. ( v přiloženém kódu jsem použil metodu PageSetup a vlastnost LeftFooter ). Chyba je o to zvláštní, že při zápisu více jak 255 znaků k chybě nedochází. Také na systému Office 2007 tato chyba nenastavá. Nikdy jsem se nepotkal s tak zvláštní chybou - proč zrovna toto rozmezí počtu znaků je smrticí je mi velkou záhadou. Vypadá to, že jde o nezdokumentovanou chybu a jak jsem napsal výše vyskytuje se pouze pro Office 2000. ( Vyzkoušel jsem chování kódu na Office 2003 EN a Win XP Prof SP2 a proběhlo bez chyby ).
Chyba se navíc extremně špatně hledala. K destrukci třídy došlo v úplně jiném modulu než se následně objevila chyba, která navíc nijak nesouvisela s předchozí činnosti.
Výše uvedené chování kódu jsem schopen kdykoliv reprodukovat na Win XP Prof SP2 EN a Office 2000 SP3 EN.
Přikládám kód na kterém jsem ověřoval funkčnost. Kód se vkláda do aplikace MS Word. Pokud byste měli chuť zkuste otestovat na Vašem systému a napište do komentářů jestli máte možnost vidět stejné chování - jen tak pro zajimavost.
'********************************************************************************
'TestZruseniTridy_Office2000
'
' Purpose: Pri pokusu zapsat data do objektu BuiltInDocumentProperties("Author")
' o delce mezi 252 az 255 znaky bude zcela tise a bez jakekoliv
' chybove hlasky znicena instance tridy Excel. Chyba se nasledne
' projevi az pri pokusu o jakoukoliv praci s tridou Excel resp.
' tridou pro excelovsky sesit.
' NOTE: KOD SE SPOUSTI Z APLIKACE MS WORD
'
' Inputs: -none-
'
' Outputs: -none-
'
' Created: 24/01/2010 Premysl Lazecky
'
' Modified: .
'
'********************************************************************************
Sub TestZruseniTridy_Office2000()
Dim objExcelApp As Object 'Excel.Application
Dim objWkb As Object 'Excel.Workbook
Dim strText As String
Dim i As Byte
On Error GoTo ErrorHandler
' vytvoreni instance tridy MS Excel
'Set objExcelApp = New Excel.Application
Set objExcelApp = CreateObject("Excel.Application")
Set objWkb = objExcelApp.Workbooks.Add
objExcelApp.Visible = True
objExcelApp.ScreenUpdating = True
' vlozeni znaku o delce 251 znaku = NEvyvola chybu
'strText = String$(251, "a")
' vlozeni znaku o delce 252 znaku = VYvola chybu
strText = String$(252, "a")
' vlozeni znaku o delce 256 znaku = NEvola chybu
'strText = String$(256, "a")
' zapis do pole Author
objWkb.BuiltinDocumentProperties("Author") = strText
' zde muze byt jakykoliv dlouhu kus kodu, pokud se nepokusite
' pristoupit k instanci tridy MS Excel vse pracuje perfektne
' Z toho vyplyva jak extremne spatne se dana chyba hledala.
' Chyba totiz nastala uplne v jinem modulu pri zcela nesouvisejici cinnosti
Debug.Print Now
' pokus o zapis do zapati listu (pokus pouzit znovu tridu)
objWkb.Sheets(1).PageSetup.LeftFooter = "Cokoliv"
ExitRoutine:
objWkb.Close False
objExcelApp.Quit
Set objExcelApp = Nothing
Set objWkb = Nothing
Exit Sub
ErrorHandler:
MsgBox "Neznama chyba" & vbNewLine & _
"Popis chyby: " & Err.Description & vbNewLine & _
"Cislo chyby: " & Err.Number, vbCritical
GoTo ExitRoutine
End Sub
Komentáře
Přehled komentářů
UAH美元外匯. https://tw.forex-stock-bitcoin-brokers.com
Are you 18? Come in and don't be shy!
(loveawake.ru, 20. 2. 2022 1:09)Welcome to the world of adult Dating loveawake.ru
Zvlastni
(Premek, 26. 1. 2010 9:51)Tak jeste to muze byt zpusobeno jazykovou odlisnosti, ve firme kde mame jen anglicke office a anglicke windowsy to pada vsude.
Chybu nemohu zreprodukovat
(mkarlik@spolana.cz, 26. 1. 2010 7:45)
Dobry den,
mam MS Office 2000 Cz SP3 a chyba se u mne neprojevuje. Zkopiroval jsem makro, spustil ve Wordu a nic. Zadna neznama chyba, ale ani zapati v listu pri spusteni nahledu.
Pozdravuje Michal Karlik
PS: Nejsem si jist, zda-li jsem na tomto pocitaci take neinstaloval nejaky modul kompatibility s 2007.
Forex eur usd news
(ForexPsync, 14. 4. 2022 7:50)