Страницы: 1
RSS
проблемы с воспроизведением записанного макроса
 
Не раз уже сталкивался за последние дни с этой ерундой, но вот решил спросить у знатоков.
Итак: на листе есть кнопка. По ней строится график. График слегка заслоняет кнопку, хочется ее на передний план. Включаю запись, правой кнопкой по кнопке (извините за тавтологию) - на задний план. Появляется вот что:

Код
    ActiveSheet.Shapes("Button 3").ZOrder msoBringToFront
    ActiveSheet.Shapes("Button 3").ZOrder msoBringToFront


Именно в двойном экземпляре. Отодвигаю кнопку на задний план, пытаюсь воспроизвести макрос - Can't find project or library и выделено это - msoBringToFront. Что за ерунда? Зачем нужен макрорекодер, если потом невозможно использовать этот код?! Офис 10ый, если что.

Пытался с другого конца:

Код
ActiveSheet.Shapes("Chart1").ZOrder msoSendToBack


те же яйца, только в профиль получились.

Еще интересовал бы ответ - как верным образом записать сей макрос?) Уж очень хочется кнопку на передний план) погуглил, поизголялся - не вышло...
Изменено: peat - 09.05.2013 18:02:55
 
Ошибка - Cant find Project or library

А еще можно сделать кнопку на панели, а не на листе - тогда не придется переводить её на передний план.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Попробуйте подставить значение константы
Код
ActiveSheet.Shapes("Button 3").ZOrder 0


По поводу ошибки "Can't find project or library" - погуглите по этой фразе, например
http://www.cyberforum.ru/vba/thread26282.html
 
Цитата
The_Prist пишет:
Ошибка - Cant find Project or library

я читал это. но макрос записан на том же самом компе, на котором он и выполнялся. ничего не закрывалось и все такое. как такое может быть? и зачем такое макрорекодерство нужно? мне, как ничего не смыслящему человеку в программировании, просто необходима помощь макрорекодера, а он так себя ведет.

вот еще пример при построении графика:
Код
.Visible = msoTrue


Код
    ActiveChart.Axes(xlCategory).Select
    ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)


выполняешь - ошибка. переделываешь код, убираешь mso - работает. зачем оно так пишет?)
это уже офис 13, конечно.

зачем эта функция, если она не работает?

Цитата


Казанский пишет:
Попробуйте подставить значение константы
Код
 ActiveSheet.Shapes("Button 3").ZOrder 0 

урррра, работает)спасибо большое! вчера сам так делал - не работало, но я вместо ActiveSheet засунул под With worksheet, а там был другой лист указан(
так вот, почему макрорекодер пишет не по вашему образцу, а пишет так, что потом сам же воспроизвести не может?)
Изменено: peat - 04.05.2013 12:32:06
 
По ссылке читали, но ничего не поняли, надо полагать. Если ошибка подобная есть - значит есть причина. Константы msoBringToFront входят в состав библиотеки Microsoft Office XX.0 Object Library. У Вас явно нет ссылки на эту библиотеку в Tools-References. Если поставить на неё ссылку - то ошибка изчезнет.

Макрорекордер верно использует синтаксис - он использует константы объектной модели Excel для назначения и использования свойств.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
peat пишет:
почему макрорекодер пишет не по вашему образцу, а пишет так, что потом сам же воспроизвести не может?
У макрорекордера есть заданный шаблон на каждое действие. "Воспроизведением" занимается не он, а компилятор VBA. Шаблон макрорекордера составлен с учетом наличия соотв. библиотек - Excel и Офиса. У вас проблема с библиотекой Офиса - идите в Tools - References и разбирайтесь с элементом Microsoft Office xx.x Object Library (xx.x - номер версии Офиса), как описано в статье The_Prist.
 
Цитата
The_Prist пишет:
По ссылке читали, но ничего не поняли, надо полагать.
там основной посыл - работает на одном компе, а на другом - нет. у меня-то один и тот же комп!

Цитата
The_Prist пишет:
Если ошибка подобная есть - значит есть причина. Константы msoBringToFront входят в состав библиотеки Microsoft Office XX.0 Object Library. У Вас явно нет ссылки на эту библиотеку в Tools-References. Если поставить на неё ссылку - то ошибка изчезнет.
да, вы правы, ее нет) спасибо за совет, а то я замучился уже с макрорекодером)
Цитата
The_Prist пишет:
Макрорекордер верно использует синтаксис - он использует константы объектной модели Excel для назначения и использования свойств.
ну вот как он его верно использует, если потом не воспроизводит сам себя? зачем конечному пользователю такой синтаксис, если он не работает? может быть, вот это ActiveSheet.Shapes("Button 3"  ;)  .ZOrder 0 не кошерный, не каноничный и совсем не правильный код, но он работает!!
уж такие банальные мелочи хотелось бы от него получать, а не в гугл или на форум лезть.
Изменено: peat - 04.05.2013 13:09:45
 
Скрытый текст


VBA лишь инструмент, который надо уметь использовать и применять. Макрорекордер - это средство Excel, а VBA потом использует созданные Excel-ем коды. И если не подключать библиотеки Excel-я - то VBA неоткуда будет черпать значения констант, используемых Excel-ем. Какие-то из них подключены по умолчанию. Библиотека в данном случае как банк знаний, в котором содержится перечисление классов, констант и пр.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
peat пишет:
...ActiveSheet.Shapes("Button 3")...
Так ведь каждый раз имя разное?
 
Какое имя? кнопка у меня одна) но переделаю ее под CommandButton - у нее цвет можно менять и прочие плюшки, нашел у вас на форуме ;)

The_Prist, это все правильно, но ведь если бы он записал код по-другому, то все бы работало без лишних злоключений) хотя люди там не глупые, значит именно в такой записи смысл есть)
 
Понял - я подумал, что и кнопка программно создаётся)) А не пробовали наоборот - диаграмму назад?
 
Юрий М, пробовал) но макрорекодер писал ее схожим синтаксисом, а он не работал без включенной бибилиотеки - как и сказалThe_Prist)
Страницы: 1
Наверх