Еще вопрос. Файл Excel перемещается с компьютера на компьютер с разными локализациями офиса одной версии. Постоянно появляются новые модули типа : ЭтаКнига1, ThisWorkBook1, Лист2, Sheet2 и т.д. Номера — условно. Причем некоторых листов в самой книге нет. В загрузке самого WorkBook стоит макрос и когда файл переносится на другой компьютер, где появляется уже новый активный модуль ThisWorkBookХ, то макрос не срабатывает. Что за дурацкая система! Как навести порядок?
Здравствуйте, Trot, Вы писали:
T>Привет. Задолбали ненужные листы Excel в дереве проектов VB. Как удалить это дело? RMB меню Remove засерено. Что делать?
Re[2]: И как запретить добавление новых модулей в дерево?
Здравствуйте, Trot, Вы писали:
T>Еще вопрос. Файл Excel перемещается с компьютера на компьютер с разными локализациями офиса одной версии. Постоянно появляются новые модули типа : ЭтаКнига1, ThisWorkBook1, Лист2, Sheet2 и т.д. Номера — условно. Причем некоторых листов в самой книге нет. В загрузке самого WorkBook стоит макрос и когда файл переносится на другой компьютер, где появляется уже новый активный модуль ThisWorkBookХ, то макрос не срабатывает. Что за дурацкая система! Как навести порядок?
А в какой папке они появляются — Microsoft Excel Objects или Modules?
Пользователь — друг программиста!
Re[3]: И как запретить добавление новых модулей в дерево?
Здравствуйте, Elena_, Вы писали:
E_>Здравствуйте, Trot, Вы писали:
T>>Еще вопрос. Файл Excel перемещается с компьютера на компьютер с разными локализациями офиса одной версии. Постоянно появляются новые модули типа : ЭтаКнига1, ThisWorkBook1, Лист2, Sheet2 и т.д. Номера — условно. Причем некоторых листов в самой книге нет. В загрузке самого WorkBook стоит макрос и когда файл переносится на другой компьютер, где появляется уже новый активный модуль ThisWorkBookХ, то макрос не срабатывает. Что за дурацкая система! Как навести порядок?
E_>А в какой папке они появляются — Microsoft Excel Objects или Modules?
В Microsoft Excel Objects.
В Modules только мои файлы — с этим все в порядке.
Re[4]: И как запретить добавление новых модулей в дерево?
Здравствуйте, Trot, Вы писали:
E_>>А в какой папке они появляются — Microsoft Excel Objects или Modules?
T>В Microsoft Excel Objects. T>В Modules только мои файлы — с этим все в порядке.
А в Ваших макросах ничего не может спровоцировать такое поведение? Дело в том, что я для одной цели в свое время пыталась добавить ЭтаКнига, туда где уже было ThisWorkbook (и наоборот) специально, в подходящей версии, конечно, и у меня ничего не получилось.
Пользователь — друг программиста!
Re[5]: И как запретить добавление новых модулей в дерево?
Здравствуйте, Elena_, Вы писали:
E_>А в Ваших макросах ничего не может спровоцировать такое поведение? Дело в том, что я для одной цели в свое время пыталась добавить ЭтаКнига, туда где уже было ThisWorkbook (и наоборот) специально, в подходящей версии, конечно, и у меня ничего не получилось.
Нет, в макросах ничего похожего нет. Инициализация переменных, открытие других книг. "Моя озабоченность" вызвана тем, что:
1. ThisWoorkBook только один, а ЭтаКнига уже несколько
2. Sheetы видимо тоже соответствуют числу доступных листов, а вот Листов развелось уже за 3-ий десяток.
3. Почему то я не могу удалить хотя бы эти листы. Меню Remove недоступно.
Сейчас работаю на английской системе. Рост страниц не наблюдаю. Возможно есть какое-то меню в Excel, которое позволяет увидеть внутрениие листы что ли. Только где такое меню — непонятно.
Re[6]: И как запретить добавление новых модулей в дерево?
Здравствуйте, Trot, Вы писали:
T>1. ThisWoorkBook только один, а ЭтаКнига уже несколько T>2. Sheetы видимо тоже соответствуют числу доступных листов, а вот Листов развелось уже за 3-ий десяток. T>3. Почему то я не могу удалить хотя бы эти листы. Меню Remove недоступно.
T>Сейчас работаю на английской системе. Рост страниц не наблюдаю. Возможно есть какое-то меню в Excel, которое позволяет увидеть внутрениие листы что ли. Только где такое меню — непонятно.
А в окне Properties у них есть свойства: Name, Visible и другие, и чему они равны?
Может быть, они VeryHidden? И на самом деле существуют?
если поменять Visible на что-нибудь и снова установить Visible, что-нибудь произойдет?
Если обратиться из программы к ним по этому объектному имени, типа,
MsgBox Лист11.Cells(1,1)
что-нибудь отобразится?
Если попробовать их так удалить, типа
Лист11.Delete
Вообще, если они есть как объекты, то можно ли ими как-то манипулировать? Я пока только о листах.
Пользователь — друг программиста!
Re[7]: И как запретить добавление новых модулей в дерево?
Спасибо, что пытаетесь мне помочь
Выяснилось следующее.
На самом деле, что объекты (назовем их неопознанными екселевскими объектоми — НЕО) под названия ЛистNN или SheetNN — это Workbookи. Это я выяснил по
1. свойств Visible у них нет (есть куча других свойств, назначение большинства я не знаю)
2. иконки другие (как файл екселя)
3. в каждом таком объекте доступна функция WoorkBook_Open.
А с листами оказалось все в порядке. Сколько в файле, столько и в дереве.
Re[8]: И как запретить добавление новых модулей в дерево?
Здравствуйте, Trot, Вы писали:
T>Выяснилось следующее. T>На самом деле, что объекты (назовем их неопознанными екселевскими объектоми — НЕО) под названия ЛистNN или SheetNN — это Workbookи. Это я выяснил по
T>1. свойств Visible у них нет (есть куча других свойств, назначение большинства я не знаю) T>2. иконки другие (как файл екселя) T>3. в каждом таком объекте доступна функция WoorkBook_Open.
T>А с листами оказалось все в порядке. Сколько в файле, столько и в дереве.
Вообще, очень это все странно выглядит. Я бы предположила, что это результат какого-то сбоя и автоматического восстановления файла. Может быть, имеет смысл просто перенести весь код и данные в чистую книгу?
То есть, как я поняла, все эти объекты имеют те же свойства, что и настоящая ThisWorkbook? Выполняются ли их события, то же Open при открытии, Save при сохранении и т.п.? Чему у них равно значение свойства IsAddin, если оно есть, как в любом нормальном ThisWorkbook? Можно ли их закрыть, и что собственно при этом закроется, если вызывать метод Close по этому объектному имени —
ЛистNN.Close
или покажет ли какое-нибудь имя
MsgBox ЛистNN.Name
Можно ли импортировать эти модули, и если можно, отличаются ли они от ThisWorkbook. То есть как-то подобраться к их удалению. Хотя, мне кажется, что надежнее просто все перенести в чистую книгу, даже копированием, а не импортом, экспортом, хотя это более-менее все равно. А то какой-то монстр просто получается.
Пользователь — друг программиста!
Re[9]: И как запретить добавление новых модулей в дерево?
Если попробовать взять указатели на эти объекты ObjPtr(ЛистNN), то они разные, как для нормальных объектов? или это просто отображение дерева проекта глючит?
Пользователь — друг программиста!
Re[10]: И как запретить добавление новых модулей в дерево?
А Вы какой офис пользуете? Если 2000-й, то там до какого-то билда (не помню, но если нужно нарою) была проблема при переходе между версиями с разной локализацией. И не только с Этой книгой, но и с названиями стандартных функций листа при использовании их в VBA.
Re[9]: И как запретить добавление новых модулей в дерево?
Здравствуйте, Elena_, Вы писали:
E_>Вообще, очень это все странно выглядит. Я бы предположила, что это результат какого-то сбоя и автоматического восстановления файла. Может быть, имеет смысл просто перенести весь код и данные в чистую книгу?
Возможно, Ексль часто падал. Можно и перенести, почучится. Только не хотелось бы тратить время, если эта проблема не серьезная. Вдруг там опять такое проявится. И переносить надо аккуратно. Пока работает, лучше не трогать
E_>То есть, как я поняла, все эти объекты имеют те же свойства, что и настоящая ThisWorkbook? Выполняются ли их события, то же Open при открытии, Save при сохранении и т.п.? Чему у них равно значение свойства IsAddin, если оно есть, как в любом нормальном ThisWorkbook? Можно ли их закрыть, и что собственно при этом закроется, если вызывать метод Close по этому объектному имени — E_>
E_>ЛистNN.Close
E_>
E_>или покажет ли какое-нибудь имя E_>
E_>MsgBox ЛистNN.Name
E_>
Эти объекты ПУСТЫЕ. Что это значит. Когда я кликаю на этот объект в окне Properties в заголовке появляется имя этого объекта, а в списке параметров отображаются свойства АКТИВНОГО WorkBook. Даже параметр (Name) показывает имя активного объекта. Собственно я так и нахожу, какой модуль рабочий.
IsAddin у этого модуля = False. Для других модулей я добраться не могу (см. предложение выше). Окно кода же появляется и в нем можно писать что угодно. В ниспадающем комбобоксике окна редактора кода есть объект WorkBook. Функции у этого объекта также существуют. Закрыть окно кода можно.
Код, который вы мне написали еще не пробовал.
E_>Можно ли импортировать эти модули, и если можно, отличаются ли они от ThisWorkbook. То есть как-то подобраться к их удалению. Хотя, мне кажется, что надежнее просто все перенести в чистую книгу, даже копированием, а не импортом, экспортом, хотя это более-менее все равно. А то какой-то монстр просто получается.
Экспортировать эти модули можно. Файл сохраняется с уникальным именем. например:
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'TrueEND
Attribute VB_Name = "ЭтаКнига2"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Private Sub Workbook_Open()
'вот собственно функция которую я добавилEnd Sub
Может быть свойста о чем то вам подскажут.
Вот такая вот шняга.
Копировать не хочется, т.к. проект большой, есть вероятность что-то забыть и порушить.
Спасибо еще раз.
Re[11]: И как запретить добавление новых модулей в дерево?
Здравствуйте, Falic, Вы писали:
F>А Вы какой офис пользуете? Если 2000-й, то там до какого-то билда (не помню, но если нужно нарою) была проблема при переходе между версиями с разной локализацией. И не только с Этой книгой, но и с названиями стандартных функций листа при использовании их в VBA.
2003 SP2.
Re[10]: И как запретить добавление новых модулей в дерево?
Конечно, можно еще подумать, что все это значит, но вообще говоря, если в проекте завелся какой-то странный баг, то лучше все-таки его пересоздать, а то он в какой-то момент может вообще перестать открываться, и придется вытаскивать код по модулям все равно. Даже если удастся удалить только эти странные объекты, это не значит, что проект полностью станет нормальным, может быть, внутренние проблемы еще усугубятся.
Вот здесь приводится автоматизация переноса проекта в пустой проект. может бьть, пригодится
А вообще сам этот странный файл растет, то есть его размер соотвествует примерно его содержимому, или он непропорционально разбухший? Проекты вообще имеют тенденцию подрастать, если, конечно, они не только для чтения.
Я, например, проекты разбиваю, всегда на данные — xls, и программную часть — xla, и ставлю ссылку в xls на xla, так что на коде это не отражается, но файлы поменьше. А xla можно в свою очередь тоже разбивать на несколько xla/
В версиях до 2002 и 2003 вообще с большими проектами у меня часто происходили неприятности, правда, не такого рода. Поэтому я иногда профилактически переносила проекты в пустую книгу, они здорово уменьшались, что само по себе удобно. В 2003 вроде еще не приходилось этим заниматься, все и так неплохо живет, правда, у меня действительно все разбито на относительно небольшие части.