Снова Меню в Excel-е

Программирование на Visual Basic for Applications
David
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 10.03.2004 (Ср) 20:41
Откуда: FRANCE

Снова Меню в Excel-е

Сообщение David » 05.12.2006 (Вт) 18:36

Мне нужно програмнно из меню передать параметры в макро. Что-бы было понятно приведу пример кода:
Код: Выделить всё
Private Sub Workbook_Open()
    Dim PervoeMenu(2) As String
    Dim Tmp0 As Integer, Tmp1 As Integer

    For Each MenuName In MenuBars(xlWorksheet).Menus
        If MenuName.Caption = "AAAAA" Then MenuName.Delete: Exit For
    Next
   
    MenuBars(xlWorksheet).Menus.Add Caption:="AAAAA"
   
    PervoeMenu(0) = "A0"
    PervoeMenu(1) = "A1"
   
    MenuBars(xlWorksheet).Menus("AAAAA").MenuItems.AddMenu Caption:=PervoeMenu(0)
    MenuBars(xlWorksheet).Menus("AAAAA").MenuItems.AddMenu Caption:=PervoeMenu(1)
   
    For Tmp0 = 0 To UBound(PervoeMenu) - 1
        For Tmp1 = 0 To 5
            MenuBars(xlWorksheet).Menus("AAAAA").MenuItems(PervoeMenu(Tmp0)).MenuItems.Add Caption:=Str(Tmp0) & "/" & Str(Tmp1), OnAction:="Begin"
        Next Tmp1
    Next Tmp0
   
End Sub

Private Function Begin(Variable As String)
    MsgBox Variable
End Function

Вообщем, здесь я пременил цикл (For), но в действительности, вместо Str(Tmp0) & "/" & Str(Tmp1), я заполняю меню именами папок на HardDisk-е, т.е. величины не постоянные.

Вопрос: можно ли, каким-нибудь способом передать или Caption или какую-нибудь переменную, например позицию в меню, в масро? т.е. что-бы в масро Begin передалось переменная Variable

Заранее благодарю

David
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 10.03.2004 (Ср) 20:41
Откуда: FRANCE

Сообщение David » 05.12.2006 (Вт) 19:08

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

Pavel55
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 27.10.2006 (Пт) 20:11

Сообщение Pavel55 » 06.12.2006 (Ср) 10:33

а нам расскажи )

David
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 10.03.2004 (Ср) 20:41
Откуда: FRANCE

Сообщение David » 06.12.2006 (Ср) 14:38

Без проблем: (и чего я не написал ответ сразу)

ообщем вместо строки
Код: Выделить всё
MenuBars(xlWorksheet).Menus("AAAAA").MenuItems(PervoeMenu(Tmp0)).MenuItems.Add Caption:=Str(Tmp0) & "/" & Str(Tmp1), OnAction:="Begin"
        Next Tmp1
    Next Tmp0


надо напсать
Код: Выделить всё
MenuBars(xlWorksheet).Menus("AAAAA").MenuItems(PervoeMenu(Tmp0)).MenuItems.Add Caption:=Str(Tmp0) & "/" & Str(Tmp1), OnAction:="Begin(" & Varibale & ")"
        Next Tmp1
    Next Tmp0


причём, если надо послать текст типа "C:\Aaaaa\ПЕРЕМЕННАЯ\Bbbbb", то строка приет вид
Код: Выделить всё
OnAction:="Begin(" & chr(34) & "C:\Aaaaa\" & ПЕРЕМЕННАЯ & "\Bbbb" & chr(34) & ")"


у или две кавычки вместо Chr(34)

David
Обычный пользователь
Обычный пользователь
 
Сообщения: 81
Зарегистрирован: 10.03.2004 (Ср) 20:41
Откуда: FRANCE

Сообщение David » 11.12.2006 (Пн) 12:05

В форме: "Меню в EXCEL-е - проблемы не кончаются" я поднимал вопрос о передаче параметров через меню EXCEL, т.к. способ описанный выше хотя и передовал переменную, но не реагировал корректно, в частнсоти оператор MsgBox срабатывал дважды и т.д.

На вопрс ответил KL:
1) функция Begin(Variable As String) должна вызываться с указанием модуля или быть перенесена в стандартный модуль с удалением слова Private

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

OnAction = "'MyModule.Begin ""KIKI""'" или OnAction = "'Begin ""KIKI""'"


за что ему большое Спасибо


Вернуться в VBA

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

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

    TopList