CommandBar

Программирование на Visual Basic for Applications
Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

CommandBar

Сообщение Tuco » 06.02.2004 (Пт) 16:45

Здравствуйте!
Хочу создать панель с кнопками, которые будут запускать макросы, но что бы ни делал, и с помощью форума, и с помощью хелпа, ничего не получается. Что-то не так с переменными... Подскажите, пожалуйста, как это сделать?
"There's more than one way to do it!"

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 06.02.2004 (Пт) 16:50

С какими переменными? :?

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 06.02.2004 (Пт) 16:58

Дословно:
Код: Выделить всё
Run-time error '91':
Object variable or With block variable not set

но у меня там нет блока With...
"There's more than one way to do it!"

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 06.02.2004 (Пт) 17:24

Приведи чуть больше кода в окрестности ошибки, пожалуйста, а то так можно дать лишь общий совет: проверь операции присвоения переменной объекта...

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 06.02.2004 (Пт) 17:30

это то, что я накопал в хелпе:
Код: Выделить всё
Dim myBlankBtn As Object
Dim myCustomBar As Object
Dim myControl As Object

Set myCustomBar = CommandBars("Custom")
Set myControl = CommandBars("Standard").Controls(1)

myControl.Copy Bar:=myCustomBar, Before:=1

Set myBlankBtn = CommandBars("Custom").Controls.Add


и с первой же строки он мне выдаёт сообщение...
"There's more than one way to do it!"

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 06.02.2004 (Пт) 17:44

Кажется, Ваша программа выглядит так:
Код: Выделить всё
Option Explicit
Private Sub Form_Load()
Dim myBlankBtn As Object
Dim myCustomBar As Object
Dim myControl As Object

Set myCustomBar = CommandBars("Custom")
Set myControl = CommandBars("Standard").Controls(1)

myControl.Copy Bar:=myCustomBar, Before:=1

Set myBlankBtn = CommandBars("Custom").Controls.Add
End Sub

И ещё подключен Word в References.

А должна, кажется, так:
Код: Выделить всё
Option Explicit
Private wrd As New Word.Application

Private Sub Form_Load()
Dim myBlankBtn As Object
Dim myCustomBar As Object
Dim myControl As Object

wrd.Visible = True

Set myCustomBar = wrd.CommandBars(1)
Set myControl = wrd.CommandBars(1).Controls(1)

myControl.Copy Bar:=myCustomBar, Before:=1

Set myBlankBtn = wrd.CommandBars(2).Controls.Add
End Sub

Необходимо использование обёекта wrd - Word.Application

Хотя я, конечно, не полностью уверен в правильности моих выводов: с VBA я работаю довольно редко и не обладаю уверенностью ))

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 06.02.2004 (Пт) 17:49

Вообще-то я с экселем работаю, а не с вордом. Как это для экселя всё сделать? Никогда не программировал для ворда... :-(
"There's more than one way to do it!"

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 06.02.2004 (Пт) 18:02

Хех, а для Excel всё точно так же - только надо заменить

Word.Application на Excel.Application, т.е.
Код: Выделить всё
Private xl as New Excel.Application

И везде поменять wrd на xl :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.02.2004 (Сб) 7:25

Amed, не путай население :wink:
Чел кодит прямо в экселе, поэтому никаких референсов там и нью обжектов. А ошибка эта возникает просто потому, что нет у тебя, Tuco, панели инструментов "Custom" :) Как я понял из приведённого куска, требуется создать свою панельку, скопировать на неё одну кнопочку с панели "Стандартная", и ещё создать пустую кнопочку, не делающую ни фига. Тады так:
Код: Выделить всё
dim myCustomBar as commandbar
set mycustombar=commandbars.add
with mycustombar
  .name="Custom"
  commandbars("standard").controls(1).copy mycustombar
  .controls.add
end with
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 09.02.2004 (Пн) 10:22

как ни странно, но при запуске этого куска результат тот же.
Код: Выделить всё
Object variable or With block variable not set
"There's more than one way to do it!"

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.02.2004 (Пн) 10:41

На какой строчке?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 09.02.2004 (Пн) 10:57

на той, где set...
"There's more than one way to do it!"

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.02.2004 (Пн) 10:59

Ты будешь смеяться, но у меня всё работает. У тебя Офис-то какой?
А, начинаю понимать. Ну-ка добавь option explicit в начало модуля...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 09.02.2004 (Пн) 11:01

офис у меня 2000
а option explicit у меня всегда в начале модуля стоит, я без него не работаю... :-)
"There's more than one way to do it!"

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.02.2004 (Пн) 11:04

Такое ощущение, что commandbars=nothing. Посмотри в watch, так ли это. :roll: Хотя бред, конечно. Или объектная модель к чёрту поменялась, и теперь это toolbar какой-нибудь?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 09.02.2004 (Пн) 11:09

но ведь я использовал его родной хелп... и в нём был именно commandbars.
А как пользоваться watch? К моему стыду я не знаю, что это такое :(
"There's more than one way to do it!"

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.02.2004 (Пн) 11:12

View - Watch window - Add watch
Харошая вещь :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 09.02.2004 (Пн) 11:21

и дальше что делать? чего-то не пойму совсем ничего...
"There's more than one way to do it!"

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.02.2004 (Пн) 17:00

Ну так в окне добавления watch пиши: commandbars. И будет оно добавлено. Вот и посмотришь, что там содержится.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 09.02.2004 (Пн) 17:54

оно пишет, что Value out of context, а type - empty. Так и раньше было, только я не понимаю, что всё это значит. :(
"There's more than one way to do it!"

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.02.2004 (Вт) 10:09

:roll:
Вложения
Рабочий стол.zip
(19.47 Кб) Скачиваний: 56
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 10.02.2004 (Вт) 10:33

а теперь что мне делать со всем этим счастьем?
"There's more than one way to do it!"

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.02.2004 (Вт) 10:35

Теперь ты знаешь, как отслеживать значения переменных в рантайме... Вот и отслеживай, что там у тебя в commandbars, когда ты выполняешь макрос через F8...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 10.02.2004 (Вт) 11:28

Я так понимаю, что нету у меня панели с кнопками?
Код: Выделить всё
    : ActionControl : Nothing : CommandBarControl :

Но ведь она-то есть!
"There's more than one way to do it!"

vrodo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 09.10.2003 (Чт) 18:45
Откуда: Дубна МО, Москва

Сообщение vrodo » 25.01.2005 (Вт) 18:31

:oops: Прошу прощения что поднимаю тему 2-х годовой давности

но я нашел решение и решил поделиться

Dim newButton As CommandBarButton
Dim customBar As CommandBar
Set customBar = Application.CommandBars.Add
With customBar
Set newButton = .Controls.Add(msoControlButton, Application.CommandBars("Edit").Controls("Cut").ID)
Set newButton = .Controls.Add(msoControlButton, Application.CommandBars("Edit").Controls("Copy").ID)
Set newButton = .Controls.Add(msoControlButton, Application.CommandBars("Edit").Controls("Paste").ID)
End With
Чтобы понять свои ошибки их достаточно написать (c)
Интернет большой, ему видней
С наилучшими Пожеланиями и Всех Благ :D


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51

    TopList