Страницы: 1
RSS
Нестабильная работа макроса на разных машинах
 
Добрый вечер.  
Подскажите плиз, есть небольшая проблема, возникновение которой я не могу понять. Существует макрос в  книге №1, который обращается к книге №2 (она в тот момент открыта), просчитывает инфу и выгружает ее в лист книги №1. Эту инфу использует объект Combobox в качестве диапозона (Listfillrange). Так вот - суть проблемы в том, что на одних машинах он работает работает корректно, на других выдает ошибку. К сожалению пользователи находятся в другом городе (у которых возникает ошибка)и я не могу увидеть причину ошибки. На скринах видно что он стопорится при попытке получить инфу из книги №2. На машинах стоит Office 2003 sp3. Две книги имеют имена на кирилице, листы тоже все на русском. Может быть вы посоветуете что нужно прочекать, дабы попробовать пофиксить возможный баг
 
Возможно, некорректно обрабатываются обращения к ячейкам 2-й книги из-за неявного указания где-то в макросе ссылки на них (например, адрес ячейки без привязки к определенному листу нужной книги либо ссылка на лист без имени книги). Покажите файлик если можно.
 
Код точно нужно посмотреть. И, желательно, скриншот ошибки.
Bite my shiny metal ass!      
 
{quote}{login=Борис}{date=16.10.2008 07:01}{thema=Нестабильная работа макроса на разных машинах}{post}Добрый вечер.  
Подскажите плиз, есть небольшая проблема, возникновение которой я не могу понять. Существует макрос в  книге №1, который обращается к книге №2 (она в тот момент открыта), просчитывает инфу и выгружает ее в лист книги №1. Эту инфу использует объект Combobox в качестве диапозона (Listfillrange). Так вот - суть проблемы в том, что на одних машинах он работает работает корректно, на других выдает ошибку. К сожалению пользователи находятся в другом городе (у которых возникает ошибка)и я не могу увидеть причину ошибки. На скринах видно что он стопорится при попытке получить инфу из книги №2. На машинах стоит Office 2003 sp3. Две книги имеют имена на кирилице, листы тоже все на русском. Может быть вы посоветуете что нужно прочекать, дабы попробовать пофиксить возможный баг{/post}{/quote}  
рекомендую переименовывать кодовые имена листов в латиницу, и обращаться с их использованием.(codename). Иначе могут быть ошибки локализации..
 
В общем вот кусок макроса..его клинет на данном блоке при обработке первой строки (обращение к листу текущей книги). Сам макрос находится в этой же книге. Опять же уточню - обе книги открыты, уже и названия на английский манер заделал, по поводу локализации попробую изменить "name" тож на английский манер, но 100% не в этом дело. Ошибка вылазает "Subscript out of range" типа индекс вне диапозона. У меня и у многих макрос работает, а вот у несколько человек в другом городе - нет.  
 
With Workbooks("extra table").Sheets("dontdelete")  
.Range("B1:B" & .Range("B1").End(xlDown).Row).ClearContents  
Countsh = Workbooks("table ticketing WT AC").Sheets.Count  
For i = 2 To Countsh  
.Cells(i - 1, 2) = Workbooks("table ticketing WT AC").Sheets(i).Name  
Next i  
End With
 
Значит у них неправильный город :-)
 
{quote}{login=Юрий М}{date=17.10.2008 02:06}{thema=}{post}Значит у них неправильный город :-){/post}{/quote}  
 
Еще будут варианты? :)
 
{quote}{login=Борис}{date=17.10.2008 02:03}{thema=Нестабильная работа макроса на разных машинах}{post}В общем вот кусок макроса..его клинет на данном блоке при обработке первой строки (обращение к листу текущей книги). Сам макрос находится в этой же книге. Опять же уточню - обе книги открыты, уже и названия на английский манер заделал, по поводу локализации попробую изменить "name" тож на английский манер, но 100% не в этом дело. Ошибка вылазает "Subscript out of range" типа индекс вне диапозона. У меня и у многих макрос работает, а вот у несколько человек в другом городе - нет.  
 
With Workbooks("extra table").Sheets("dontdelete")  
.Range("B1:B" & .Range("B1").End(xlDown).Row).ClearContents  
Countsh = Workbooks("table ticketing WT AC").Sheets.Count  
For i = 2 To Countsh  
.Cells(i - 1, 2) = Workbooks("table ticketing WT AC").Sheets(i).Name  
Next i  
End With{/post}{/quote}  
 
я так и не понял на какой имеено строке клинит  
With Workbooks("extra table").Sheets("dontdelete")  
 
или  
.Range("B1:B" & .Range("B1").End(xlDown).Row).ClearContents  
 
если второй вариант, то попробуйте    
.Range("B1:B" & val(.Range("B1").End(xlDown).Row)).ClearContents  
 
для первого - я ранее имел ввиду применение другой конструкции:  
With Workbooks("extra table.xls").dontdelete
 
Если на первой строке With Workbooks("extra table").Sheets("dontdelete"), то можно попробовать заменить Workbooks("extra table") на ThisWorkbook, т.к. макрос находится в этой же книге.
 
Клинит на    
With Workbooks("extra table").Sheets("dontdelete")  
 
//для первого - я ранее имел ввиду применение другой конструкции:  
//With Workbooks("extra table.xls").dontdelete  
 
попробую конечно, но я на всякий случай добавил перед отправкой глючным пользователям в тело макроса данный блок перед оператором with (для самоуспокоения и для отработки вашей версии)  
 
Sheet1.MthBox.ListFillRange = ""  
Sheet1.MthBox.Value = ""  
Sheet1.DayBox.Value = ""  
Лист11.MthBox1.ListFillRange = ""  
Лист11.MthBox1.Value = ""  
 
так вот эта стервь данный блок проглотила не ругнувшись, а на With Workbooks("extra table").Sheets("dontdelete") ее опять закаматозило :)  
 
За совет спасибо, попробую, как Вы сказали..результаты сообщу
 
{quote}{login=Raptor}{date=17.10.2008 03:36}{thema=}{post}Если на первой строке With Workbooks("extra table").Sheets("dontdelete"), то можно попробовать заменить Workbooks("extra table") на ThisWorkbook, т.к. макрос находится в этой же книге.{/post}{/quote}  
 
Как быть если есть такой же в принципе блок который обращается ко внешней открытой книге. По любому придется обращаться к библиотеке книг Workbooks :(  
Просто мне в принципе непонятно че она глючит в Нске :) народ чтоль там особый))) мне даже видюху они выслали как и что они делают...правильно вроде на все тыркуют...а оно ругается))
 
файлы /листы не переименовывали?
 
extra table  или extra table.xls ?  
 
уберите пробелы из имени..
 
{quote}{login=}{date=17.10.2008 03:50}{thema=}{post}файлы /листы не переименовывали?{/post}{/quote}  
 
нет - не менял
 
{quote}{login=}{date=17.10.2008 03:52}{thema=}{post}extra table  или extra table.xls ?  
 
уберите пробелы из имени..{/post}{/quote}  
 
Workbooks("extra table").....  
всегда так писал, без расширения..сам файл extra table.xls  
с пробелом....попробую убрать пробел и вставить расширение в индекс...спасибо
 
//для первого - я ранее имел ввиду применение другой конструкции:  
//With Workbooks("extra table.xls").dontdelete  
 
Данная конструкция не работает, "object doesnt support...."  
где dontdelete у меня это имя листа и соотвенственно коднейм листа....увы((
 
{quote}{login=Борис}{date=17.10.2008 04:01}{thema=Re: }{post}{quote}{login=}{date=17.10.2008 03:50}{thema=}{post}файлы /листы не переименовывали?{/post}{/quote}  
 
нет - не менял{/post}{/quote}  
 
а они?
 
и они тож
 
Workbooks("extra table") открывается макросом? Может ей переменную назначить?  
т.е. не Workbooks.Open "extra table", а Set wb=Workbooks.Open("extra table")?  
И тогда With wb.Sheets("dontdelete")  
Код все-таки желательно целиком...
Bite my shiny metal ass!      
 
И по-любому лучше к книге в которой находится макрос обращаться как советовал Raptor, т.е. ThisWorkbook, а всем открываемым книгам давать переменные через Set.
Bite my shiny metal ass!      
 
{quote}{login=Лузер™}{date=19.10.2008 06:16}{thema=}{post}Workbooks("extra table") открывается макросом? Может ей переменную назначить?  
т.е. не Workbooks.Open "extra table", а Set wb=Workbooks.Open("extra table")?  
И тогда With wb.Sheets("dontdelete")  
Код все-таки желательно целиком...{/post}{/quote}  
 
Вы не поняли, в момент запуска макроса две книги уже открыты...ничего открывать не надо и "сетить" соо-но тоже...код к сожалению целиком прислать не могу(((...выслал только кусок на котором стопорится...
 
{quote}{login=Борис}{date=17.10.2008 04:16}{thema=}{post}//для первого - я ранее имел ввиду применение другой конструкции:  
//With Workbooks("extra table.xls").dontdelete  
 
Данная конструкция не работает, "object doesnt support...."  
где dontdelete у меня это имя листа и соотвенственно коднейм листа....увы(({/post}{/quote}  
 
вот я как раз имел ввиду, что не имя листа, а кодовое имя изменить, которое пользователю недоступно..
Живи и дай жить..
 
{quote}{login=Борис}{date=22.10.2008 10:57}{thema=Re: }{post}{quote}{login=Лузер™}{date=19.10.2008 06:16}{thema=}{post}Workbooks("extra table") открывается макросом? Может ей переменную назначить?  
т.е. не Workbooks.Open "extra table", а Set wb=Workbooks.Open("extra table")?  
И тогда With wb.Sheets("dontdelete")  
Код все-таки желательно целиком...{/post}{/quote}  
 
Вы не поняли, в момент запуска макроса две книги уже открыты...ничего открывать не надо и "сетить" соо-но тоже...код к сожалению целиком прислать не могу(((...выслал только кусок на котором стопорится...{/post}{/quote}Что ж там такого секретного? Это ж не данные в таблицах. Ну замените все секретные наименования на яблоки/груши. А "сетить" я бы все равно советовал. Пусть она открыта, тогда Сет вб=воркбук("бла-бла")
Bite my shiny metal ass!      
Страницы: 1
Читают тему
Наверх