Панель инструментов 2
ТО что я вкладываю её в книгу не дает результата....
Как сделать чтобы созданная панель инструментов открывалась с данной книгой, и ни с какими другими книгами?
ТО что я вкладываю её в книгу не дает результата....
Мне кажется, проще всего удалять панель при закрытиии книги, в которую она вложена. Удалять, естественно, из набора панелей приложения, а не из книги.
Как сделать чтобы созданная панель инструментов открывалась с данной книгой, и ни с какими другими книгами?
ТО что я вкладываю её в книгу не дает результата....
Для пояснения потомкам:
Если панель вложить в книгу, а потом открыть ее (например на другом компе), то вложенная панель просто скопируется в Excel и станет там еще одной постоянной пользовательской панелью(т.е. она останется там висеть и после закрытия книги и даже после повторного запуска Excel'я). Если в Excele уже есть панель с таким названием, то вложенная в книгу панель копироваться не будет (кстати и доступ к ней тогда программно получить будет невозможно)
В соотв. с выше сказанным в твоей ситуации действительно остается только во время закрытия книги удалять панель из Excel'я
В соотв. с выше сказанным в твоей ситуации действительно остается только во время закрытия книги удалять панель из Excel'я
Можно написать такой макрос, чтобы он выполнялся при нажатии на закрытие файла, или придется для это сделать спец. кнопку?
Можно написать такой макрос, чтобы он выполнялся при нажатии на закрытие файла, или придется для это сделать спец. кнопку?
В модуль VBA-проекта "Эта книга" поместить код типа:
Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars(<имя или номер панели>).Delete
End Sub
Всё сработает автоматически при закрытии книги.
В модуль 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
в чём может быть причина, уровень безопасности стоит самый низкий?
Но оно не срабатывает, ни 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() должна именно создавать панель или включать уже готовую и вложенную в рабочую книгу?
Я понял последовательность событий так:
1. AutoExec() должна как-то создавать панель инструментов, но не создает.
2. Workbook_BeforeClose() должна удалять то, что создала бы AutoExec(), но она выдает сообщение об ошибке.
Верно ли?
Если всё верно, то начинать надо с AutoExec(). Ведь если ничего не создано, то что удалять?
Да, мысль была такая, потому что созданная панель занимает пятую часть экрана, и при случайном нажатии кнопок, может происходит а может и не происходить запуск искомого файла.
1)Вы правы AutoExec() ничего не создаёт, даже не могу понять что с этим связано?
2)Workbook_BeforeClose() сообщение об ошибке не выдает, что его нет что он есть... На данный момент я его удалил.
Кстати, а AutoExec() должна именно создавать панель или включать уже готовую и вложенную в рабочую книгу?
AutoExec() должна создавать панель, потому что со вкладыванием панелей в книгу идет ещё большая неразбериха, потому что мне пришлось раз пять удалять вложенную панель: удаляю-показывает что её нет, запускаю снова, а она есть.
P.S. это делалось до создания AutoExec(), т.е. никто во время запуска её создать не мог.
Да, мысль была такая, потому что созданная панель занимает пятую часть экрана, и при случайном нажатии кнопок, может происходит а может и не происходить запуск искомого файла.
1)Вы правы AutoExec() ничего не создаёт, даже не могу понять что с этим связано?
2)Workbook_BeforeClose() сообщение об ошибке не выдает, что его нет что он есть... На данный момент я его удалил.
AutoExec() должна создавать панель, потому что со вкладыванием панелей в книгу идет ещё большая неразбериха, потому что мне пришлось раз пять удалять вложенную панель: удаляю-показывает что её нет, запускаю снова, а она есть.
P.S. это делалось до создания AutoExec(), т.е. никто во время запуска её создать не мог.
Может покажете код AutoExec()?
На какой версии Excel работаете?
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
Может покажете код 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
Workbook_Open()
End Sub
не работает
пробовал и Workbook_Open() и AutoExec() и в этой книге и в персональной книге макросов- не работает.
Сработал один вариант AutoExec() в Word, с шаблоном Normal.dot панель создается но в Word.
Какие у Вас есть мнения?
не работает
пробовал и Workbook_Open() и AutoExec() и в этой книге и в персональной книге макросов- не работает.
Сработал один вариант AutoExec() в Word, с шаблоном Normal.dot панель создается но в Word.
Какие у Вас есть мнения?
У меня Ваш макрос благополучно работает и в Office 2000, и в Office 2003.
А у Вас вообще макросы (хоть какие-нибудь) из модуля "Эта книга" (при событиях Workbook_Open() и Workbook_BeforeClose()) или из персональной книги макросов запускаются?
Если нет, то, думаю, надо сносить Office и ставить заново.
Не оставляет меня смутное ощущение, что всё дело в том, что у автора вопроса все макросы, включая события рабочей книги, расположены в стандартном модуле, отсюда и все проблемы.
Честно говоря, меня тоже.
Но corvin пишет, что пробовал включать свои макросы в "эту книгу" (без слова "модуль", правда).
Посмотрим, что ответит на последний вопрос.
Цитата :
пробовал и Workbook_Open() и AutoExec() и в этой книге и в персональной книге макросов- не работает.
Имеется ввиду, что были проведены "опыты" на этой книге и файле personal.xls
А под этой книгой явно имеется ввиду текущая/активная рабочая книга.
И ещё один момент, в среде MS Excel о AutoExec() я ничего не слышал, возможно имеются ввиду макросы, которые остались в наследство от MS Excel 95, а именно :
Sub Auto_Open()
Sub Auto_Close()
которые в свою очередь можно разместить в любом стандартном модуле, что может быть полезно для автора вопроса.
Честно говоря, меня тоже.
Но corvin пишет, что пробовал включать свои макросы в "эту книгу" (без слова "модуль", правда).
Посмотрим, что ответит на последний вопрос.
В VBA проекте есть список Microsoft Excel Object и список Modules. То есть в одном содержатся обьекты а в другом модули. Получается "Эта книга"- обьект.
Когда код содержится в обьекте "Эта книга" все работает.
Либо мы неправильно использовали терминологию, либо я понимаю её узко:(
Спасибо за Ваше терпение!
Благодарен!
И ещё один момент, в среде MS Excel о AutoExec() я ничего не слышал, возможно имеются ввиду макросы, которые остались в наследство от MS Excel 95, а именно :
Sub Auto_Open()
Sub Auto_Close()
которые в свою очередь можно разместить в любом стандартном модуле, что может быть полезно для автора вопроса.
Насчёт AutoExec(), я видел пример для Word, и посчитал что Excel он работает.
Sub Auto_Open()
Sub Auto_Close()
Попробую! Спасибо!
Вы размещаете макросы не в об'екте, а в программном модуле, который соответствует этому об'екту.
С наилучшими пожеланиями, Павел.
..да я ещё не знал что маосы можно размещать в этом обьекте:(
Насчёт AutoExec(), я видел пример для Word, и посчитал что Excel он работает.
Sub Auto_Open()
Sub Auto_Close()
Попробую! Спасибо!
Пока я писал ответ, Павел, уже резюмировал всю переписку. Мне остаётся лишь написать "объяснительную о своём поведении".
Все компоненты проекта VBA ("Эта книга", листы, формы, модули простые и модули класса) - это объекты. Каждому из них присуще свойство содержать в себе некий код, который и размещается в модуле кода соответствующего объекта. Следствие: любой объект проекта, кроме формы, я именую просто модулем.
Вероятно, следовало написать так: коды обработки событий открывания и закрывания рабочей книги (Workbook_Open и Workbook_Close) должны размещаться в модуле кода объекта "Эта книга" ("ThisWorkbook").
Прошу прощения за то, что ввёл Вас в такое недоразумение.
Прошу прощения за то, что ввёл Вас в такое недоразумение.
Думаю это излишне.
Не всегда действия описываюся полностью (я имею виду людей) много для них бесусловно понятно, как это было понятно и для Вас)
Спасибо!