2015-04-24 2 views
11

Я хочу добавить кнопку на мой рабочий лист excel, который должен вызывать макрос, который может обрабатывать один ажимент (целочисленное значение). К сожалению, при создании кнопки я не могу связать какой-либо макрос с аргументами. Также просто набирать макрос и аргумент не работает.Как вызвать макрос с помощью кнопки и передать аргументы

Есть ли какое-либо простое решение передать аргумент макросу при нажатии кнопки?

+3

На самом деле вы можете ввести имя и аргумент макроса, заключенные в одинарные кавычки (например, ''macro 5''), но не используйте этот метод, если ваш файл находится в формате .xlsb. – Rory

ответ

3

Используйте кнопку командный элемент управления ActiveX и в методе нажатия кнопки вызовите подлодку и передать аргумент:

Private Sub CommandButton_Click() 

    Dim x as Integer 
    x = 1 
    Call SomeSub(x) 

End Sub 
3

Called от обычной кнопки «формы» на листе вы можете сделать что-то как это:

Sub TestMe() 
    Dim c, arr 
    c = Application.Caller 
    arr = Split(c, "_") 
    If UBound(arr) > 0 Then MsgBox "Got " & arr(1) 
End Sub 

Где кнопка вызова называется (например) "Button_3"

Or (простофиля Лер) щелкните правой кнопкой мыши на кнопку и введите 'TestMe2 5' (включая апострофы)

Sub TestMe2(i) 
    MsgBox "Got " & i 
End Sub 

Смотрите также: Excel 2010 - Error: Cannot run the macro SelectCell using .onAction

23

Да, вы можете назначить макрос на кнопку (или другой первенствует Контролирует действия/меню) и передать в него постоянные ИЛИ переменные аргументы.

В «Назначить макрос» окно (щелкните правой кнопкой мыши на объекте и выберите «Назначить макрос»):

  • Заключите имя макроса в одинарные кавычки, например для передачи 2 констант: 'Button1_Click («A string!», 7)'
  • Выберите «Эта книга» для поля «Макросы»
  • Если вы хотите передать переменную (например, значение ячейки) заключайте параметр в Оценивать()

Например, чтобы передать значение Лист1 $ A $ 1 к функции кнопки, то будет иметь следующий текст! «имя макроса:» поля:

'Button1_Click (Оценить ("Sheet1! $ A $ 1"))'

Если вы не включаете аргумент переменной wi th функция «Оценить», excel возвращает ошибку «Формула слишком сложна для назначения объекту».

Я бы включил изображение, если бы это было разрешено на моем первом посту.

+0

Я пробовал ваш подход, но я не смог заставить его работать. Кажется, что функция или макрос не разрешены как назначенный макрос, если он принимает аргументы. –

+2

Закрытие имени макроса - это кавычки, сработанные для меня: я задал имя макроса '' Select 1,2'' для кнопки, и он правильно назвал мой метод «Выбрать». – Quango

+2

Спасибо! Это решение работало для передачи одного аргумента - что, если есть несколько аргументов? –

0

я ударил тот же вопрос с assign button не быть очень полезным, пока я не понял, что весь потенциал macros отображаются были только те, в моем файле Personal.xlsb, которые не принимали никаких аргументов. Затем я набрал Personal.xlsb!'macroNameWhichTakesArguments("arg1", ...)', и лист поднял его.

I.E. Personal.xlsb!'testForXXXX("Test Test")'

Где macro testForXXXX взять строку в качестве входных данных, тогда лист работал нормально.

При использовании макроса назначения назначения для button in excel 2007 не менее testForXXXX не будет отображаться в списке потенциальных макросов, если он принимает аргументы.

Я подозреваю, что Аарон С тоже сработал. Может быть, лучше не использовать файл Personal.xlsb?