Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Панель инструментов 2

3.8K
03 февраля 2005 года
corvin
31 / / 04.07.2004
Как сделать чтобы созданная панель инструментов открывалась с данной книгой, и ни с какими другими книгами?
ТО что я вкладываю её в книгу не дает результата....
405
03 февраля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by corvin
Как сделать чтобы созданная панель инструментов открывалась с данной книгой, и ни с какими другими книгами?
ТО что я вкладываю её в книгу не дает результата....



Мне кажется, проще всего удалять панель при закрытиии книги, в которую она вложена. Удалять, естественно, из набора панелей приложения, а не из книги.

258
03 февраля 2005 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by corvin
Как сделать чтобы созданная панель инструментов открывалась с данной книгой, и ни с какими другими книгами?
ТО что я вкладываю её в книгу не дает результата....



Для пояснения потомкам:
Если панель вложить в книгу, а потом открыть ее (например на другом компе), то вложенная панель просто скопируется в Excel и станет там еще одной постоянной пользовательской панелью(т.е. она останется там висеть и после закрытия книги и даже после повторного запуска Excel'я). Если в Excele уже есть панель с таким названием, то вложенная в книгу панель копироваться не будет (кстати и доступ к ней тогда программно получить будет невозможно)


В соотв. с выше сказанным в твоей ситуации действительно остается только во время закрытия книги удалять панель из Excel'я

3.8K
03 февраля 2005 года
corvin
31 / / 04.07.2004
Цитата:
Originally posted by SergeySV

В соотв. с выше сказанным в твоей ситуации действительно остается только во время закрытия книги удалять панель из Excel'я




Можно написать такой макрос, чтобы он выполнялся при нажатии на закрытие файла, или придется для это сделать спец. кнопку?

405
03 февраля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by corvin



Можно написать такой макрос, чтобы он выполнялся при нажатии на закрытие файла, или придется для это сделать спец. кнопку?



В модуль VBA-проекта "Эта книга" поместить код типа:

Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars(<имя или номер панели>).Delete
End Sub

Всё сработает автоматически при закрытии книги.

3.8K
05 февраля 2005 года
corvin
31 / / 04.07.2004
Цитата:
Originally posted by Dmitrii


В модуль VBA-проекта "Эта книга" поместить код типа:

Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars(<имя или номер панели>).Delete
End Sub

Всё сработает автоматически при закрытии книги.


Но оно не срабатывает, ни AutoExec при запуске ни Workbook_BeforeClose при закрытии:

Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("111").Delete
End Sub

Sub AutoExec()
создание панели "111"
end sub

в чём может быть причина, уровень безопасности стоит самый низкий?

405
07 февраля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by corvin

Но оно не срабатывает, ни AutoExec при запуске ни Workbook_BeforeClose при закрытии:

Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("111").Delete
End Sub

Sub AutoExec()
создание панели "111"
end sub

в чём может быть причина, уровень безопасности стоит самый низкий?



Я понял последовательность событий так:
1. AutoExec() должна как-то создавать панель инструментов, но не создает.
2. Workbook_BeforeClose() должна удалять то, что создала бы AutoExec(), но она выдает сообщение об ошибке.
Верно ли?

Если всё верно, то начинать надо с AutoExec(). Ведь если ничего не создано, то что удалять?

Если моё предположение неверно, то что именно происходит?

Кстати, а AutoExec() должна именно создавать панель или включать уже готовую и вложенную в рабочую книгу?

3.8K
08 февраля 2005 года
corvin
31 / / 04.07.2004
Цитата:
Originally posted by Dmitrii


Я понял последовательность событий так:
1. AutoExec() должна как-то создавать панель инструментов, но не создает.
2. Workbook_BeforeClose() должна удалять то, что создала бы AutoExec(), но она выдает сообщение об ошибке.
Верно ли?

Если всё верно, то начинать надо с AutoExec(). Ведь если ничего не создано, то что удалять?


Да, мысль была такая, потому что созданная панель занимает пятую часть экрана, и при случайном нажатии кнопок, может происходит а может и не происходить запуск искомого файла.

1)Вы правы AutoExec() ничего не создаёт, даже не могу понять что с этим связано?
2)Workbook_BeforeClose() сообщение об ошибке не выдает, что его нет что он есть... На данный момент я его удалил.

Цитата:
Originally posted by Dmitrii

Кстати, а AutoExec() должна именно создавать панель или включать уже готовую и вложенную в рабочую книгу?



AutoExec() должна создавать панель, потому что со вкладыванием панелей в книгу идет ещё большая неразбериха, потому что мне пришлось раз пять удалять вложенную панель: удаляю-показывает что её нет, запускаю снова, а она есть.
P.S. это делалось до создания AutoExec(), т.е. никто во время запуска её создать не мог.

405
08 февраля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by corvin

Да, мысль была такая, потому что созданная панель занимает пятую часть экрана, и при случайном нажатии кнопок, может происходит а может и не происходить запуск искомого файла.

1)Вы правы AutoExec() ничего не создаёт, даже не могу понять что с этим связано?
2)Workbook_BeforeClose() сообщение об ошибке не выдает, что его нет что он есть... На данный момент я его удалил.


AutoExec() должна создавать панель, потому что со вкладыванием панелей в книгу идет ещё большая неразбериха, потому что мне пришлось раз пять удалять вложенную панель: удаляю-показывает что её нет, запускаю снова, а она есть.
P.S. это делалось до создания AutoExec(), т.е. никто во время запуска её создать не мог.



Может покажете код AutoExec()?
На какой версии Excel работаете?

1.2K
08 февраля 2005 года
Штурман
147 / / 01.08.2003
Вот код выдранный из одного моего документа. Аналогичный код содержится практически во всех моих документах. Вопрос с переносом книги на другой комп там тоже решен.Глюков не наблюдалось.Разумеется для каждой книги требуется свое имя для панели.Я обычно даю их по названию книги

Private Sub Workbook_Open()
UserForm1.Show
On Error GoTo Errors1
Application.CommandBars("Прайс").Visible = True
GoTo Ends:
Errors1:
With Application.CommandBars.Add(Name:="Прайс", Position:=msoBarTop)
.Visible = True
With .Controls
With .Add(Type:=msoControlButton, ID:=1)
.TooltipText = "Обновляет текущие значения книги. Необходимо перед нажатием этой кнопки сформировать прайс из 1С"
.OnAction = "обновить"
.Caption = " Обновить "
.Style = msoButtonCaption
End With
'
End With

End With
Resume Next
Ends:
End Sub
Private Sub Workbook_Activate()
Application.CommandBars("Прайс").Visible = True
UserForm1.Show
End Sub


Private Sub Workbook_Deactivate()
' Windows("заказы.xls").Activate
Application.CommandBars("Прайс").Visible = False
UserForm1.Hide

End Sub
1.2K
08 февраля 2005 года
Штурман
147 / / 01.08.2003
можно втыкать в любой документ, и пользоватся. Только все UserForm1 поуничтожать в коде.
3.8K
10 февраля 2005 года
corvin
31 / / 04.07.2004
Цитата:
Originally posted by Dmitrii


Может покажете код AutoExec()?
На какой версии Excel работаете?


1)Microsoft Office 2003
2) В коде ничего особенного, отдельно он работает, но всё же:
Sub AutoExec()
With Application.CommandBars.Add("Sklad", , False, False)
.Visible = True
.Position = msoBarRight
With .Controls
With .Add(msoControlButton)
.Style = msoButtonIconAndWrapCaption
.Caption = "Запись доноски"
.FaceId = 250
.OnAction = "Запись_доноски3"
.Height = 140
End With
With .Add(msoControlButton)
.Style = msoButtonIconAndWrapCaption
.Caption = "Добавить лист без остатков"
.FaceId = 176
.OnAction = "ДобавитьЛист"
.Height = 140
End With
остальные кнопки пропустил
End With
End With

End Sub

3.8K
10 февраля 2005 года
corvin
31 / / 04.07.2004
Цитата:
Originally posted by Штурман


Workbook_Open()
End Sub


не работает

пробовал и Workbook_Open() и AutoExec() и в этой книге и в персональной книге макросов- не работает.

Сработал один вариант AutoExec() в Word, с шаблоном Normal.dot панель создается но в Word.

Какие у Вас есть мнения?

405
10 февраля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by corvin

не работает

пробовал и Workbook_Open() и AutoExec() и в этой книге и в персональной книге макросов- не работает.

Сработал один вариант AutoExec() в Word, с шаблоном Normal.dot панель создается но в Word.

Какие у Вас есть мнения?



У меня Ваш макрос благополучно работает и в Office 2000, и в Office 2003.

А у Вас вообще макросы (хоть какие-нибудь) из модуля "Эта книга" (при событиях Workbook_Open() и Workbook_BeforeClose()) или из персональной книги макросов запускаются?
Если нет, то, думаю, надо сносить Office и ставить заново.

275
10 февраля 2005 года
pashulka
985 / / 19.09.2004
Не оставляет меня смутное ощущение, что всё дело в том, что у автора вопроса все макросы, включая события рабочей книги, расположены в стандартном модуле, отсюда и все проблемы.
405
10 февраля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by pashulka
Не оставляет меня смутное ощущение, что всё дело в том, что у автора вопроса все макросы, включая события рабочей книги, расположены в стандартном модуле, отсюда и все проблемы.



Честно говоря, меня тоже.
Но corvin пишет, что пробовал включать свои макросы в "эту книгу" (без слова "модуль", правда).
Посмотрим, что ответит на последний вопрос.

275
10 февраля 2005 года
pashulka
985 / / 19.09.2004
Кстати, автор вопроса нигде не утверждал, что расположил эти макросы именно в программном модуле ThisWorkbook (ЭтаКнига).

Цитата :
пробовал и Workbook_Open() и AutoExec() и в этой книге и в персональной книге макросов- не работает.

Имеется ввиду, что были проведены "опыты" на этой книге и файле personal.xls
А под этой книгой явно имеется ввиду текущая/активная рабочая книга.

И ещё один момент, в среде MS Excel о AutoExec() я ничего не слышал, возможно имеются ввиду макросы, которые остались в наследство от MS Excel 95, а именно :

Sub Auto_Open()
Sub Auto_Close()

которые в свою очередь можно разместить в любом стандартном модуле, что может быть полезно для автора вопроса.
3.8K
10 февраля 2005 года
corvin
31 / / 04.07.2004
Цитата:
Originally posted by Dmitrii


Честно говоря, меня тоже.
Но corvin пишет, что пробовал включать свои макросы в "эту книгу" (без слова "модуль", правда).
Посмотрим, что ответит на последний вопрос.


В VBA проекте есть список Microsoft Excel Object и список Modules. То есть в одном содержатся обьекты а в другом модули. Получается "Эта книга"- обьект.
Когда код содержится в обьекте "Эта книга" все работает.
Либо мы неправильно использовали терминологию, либо я понимаю её узко:(

Спасибо за Ваше терпение!
Благодарен!

3.8K
10 февраля 2005 года
corvin
31 / / 04.07.2004
..да я ещё не знал что маосы можно размещать в этом обьекте:(
Цитата:
Originally posted by pashulka

И ещё один момент, в среде MS Excel о AutoExec() я ничего не слышал, возможно имеются ввиду макросы, которые остались в наследство от MS Excel 95, а именно :

Sub Auto_Open()
Sub Auto_Close()

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


Насчёт AutoExec(), я видел пример для Word, и посчитал что Excel он работает.
Sub Auto_Open()
Sub Auto_Close()
Попробую! Спасибо!

275
10 февраля 2005 года
pashulka
985 / / 19.09.2004
Ну как мы видим собака порылась именно в месте расположения макросов. Очень хорошо, что corvin решил свою задачу, но только небольшое уточнение :
Вы размещаете макросы не в об'екте, а в программном модуле, который соответствует этому об'екту.

С наилучшими пожеланиями, Павел.
405
10 февраля 2005 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by corvin
..да я ещё не знал что маосы можно размещать в этом обьекте:(

Насчёт AutoExec(), я видел пример для Word, и посчитал что Excel он работает.
Sub Auto_Open()
Sub Auto_Close()
Попробую! Спасибо!



Пока я писал ответ, Павел, уже резюмировал всю переписку. Мне остаётся лишь написать "объяснительную о своём поведении".

Все компоненты проекта VBA ("Эта книга", листы, формы, модули простые и модули класса) - это объекты. Каждому из них присуще свойство содержать в себе некий код, который и размещается в модуле кода соответствующего объекта. Следствие: любой объект проекта, кроме формы, я именую просто модулем.
Вероятно, следовало написать так: коды обработки событий открывания и закрывания рабочей книги (Workbook_Open и Workbook_Close) должны размещаться в модуле кода объекта "Эта книга" ("ThisWorkbook").
Прошу прощения за то, что ввёл Вас в такое недоразумение.

3.8K
10 февраля 2005 года
corvin
31 / / 04.07.2004
Цитата:
Originally posted by Dmitrii

Прошу прощения за то, что ввёл Вас в такое недоразумение.


Думаю это излишне.
Не всегда действия описываюся полностью (я имею виду людей) много для них бесусловно понятно, как это было понятно и для Вас)
Спасибо!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог