Проблема с контекстным меню

Программирование на Visual Basic for Applications
bing
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 19.08.2006 (Сб) 22:47

Проблема с контекстным меню

Сообщение bing » 19.08.2006 (Сб) 22:58

условия:
в ячейках таблицы (excel) хранятся имена файлов
задача:
в меню правой кнопки мыши добавить пункт, чтобы посылать эти файлы на печать.

сделал так:

Код: Выделить всё
Private Declare Function ShellExecMy Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long


Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim filename As String
filename = ActiveCell.Text
Application.CommandBars("Cell").Reset
With Application.CommandBars("Cell").Controls
    With .Add(Type:=msoControlButton, Temporary:=True)
         .Caption = "P&rint"
         .BeginGroup = True
         .OnAction = ShellExecMy(0, "Print", "c:\" & filename, nil, nil, SW_HIDE)
    End With
End With

End Sub


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

где грабли?
спасибо.

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 19.08.2006 (Сб) 23:41

Думаю, вся проблема в этом - BeforeRightClick, а именно в первой части слова.
'Til the blood on your hans is the blood of the King!

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

Сообщение GSerg » 19.08.2006 (Сб) 23:56

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

bing
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 19.08.2006 (Сб) 22:47

Сообщение bing » 20.08.2006 (Вс) 12:51

GSerg писал(а):Bagathur, а ты код процедуры смотрел или только первую часть слова?..


а что надо поправить в самой процедуре, чтобы она работала как надо?

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

Сообщение GSerg » 20.08.2006 (Вс) 12:58

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

bing
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 19.08.2006 (Сб) 22:47

Сообщение bing » 20.08.2006 (Вс) 13:08

GSerg писал(а):А ты сам как думаешь, что вообще полагается присваивать свойству OnAction?


сам я ничего не думаю, к сожалению, так как VBA толком не знаю (потому и спрашиваю).
из описания следует, что OnAction - это события, которые происходят после выбора созданного пункта меню.
но вот почему эти события происходят без выбора этого пункта, мне не ясно.

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

Сообщение GSerg » 20.08.2006 (Вс) 13:23

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

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

bing
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 19.08.2006 (Сб) 22:47

Сообщение bing » 20.08.2006 (Вс) 13:36

GSerg писал(а):Из описания следует, что OnAction - это куда надо записать имя макроса, который будет выполнен при выборе пунта меню.

http://www.vbstreets.ru/VBA/Articles/65843.aspx
Т.к. пункт меню через свойство OnAction может быть связан с процедурой не имеющей входных параметров, а процедура без входных параметров в VBA для Word и Excel является макросом[/quote]

тогда исправьте "может быть" на "должен быть".

GSerg писал(а):Скажи, bing, а известна ли тебе разница между 1 и "1"?

известна.

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

Сообщение GSerg » 20.08.2006 (Вс) 13:50

bing писал(а):http://www.vbstreets.ru/VBA/Articles/65843.aspx
Т.к. пункт меню через свойство OnAction может быть связан с процедурой не имеющей входных параметров, а процедура без входных параметров в VBA для Word и Excel является макросом

тогда исправьте "может быть" на "должен быть".

Не исправим, т.к. пункт может и не быть связан с процедурой. Пустой пункт бывает.

bing писал(а):
GSerg писал(а):Скажи, bing, а известна ли тебе разница между 1 и "1"?
известна.

Тогда, судя по логике, в исходном коде должна была бы быть строчка OnAction = "ShellExecMy(0, ""Print"", ""c:"" & filename, nil, nil, SW_HIDE)" (это неверно, но всё же по логике такого присвоения подходит), но, однако же, там OnAction = ShellExecMy(0, "Print", "c:" & filename, nil, nil, SW_HIDE)...


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


Вернуться в VBA

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

Сейчас этот форум просматривают: Yandex-бот и гости: 57

    TopList