VBA не может найти мой макрос, когда у него есть параметры - PullRequest
0 голосов
/ 03 марта 2011

Я пытаюсь написать макрос, который будет прикреплен к ряду кнопок на вкладке Office 2010 за кулисами. В зависимости от нажатой кнопки, макрос должен вызываться с разными параметрами.

Проблема, с которой я столкнулся, заключается в том, что если макрос определен как имеющий параметры, то VBA отобразит диалоговое окно «Макросы», в котором нет макросов. Удаление параметров из объявления позволит макросу работать, но для этого нужны макросы.

Используемый VBA ниже:

Sub NewDocs(docType As String, docTemplate As String)
   Dim sMyShellCommand As String
   sMyShellCommand = "C:\NewDocs.exe " & docType & docTemplate
   WordBasic.Shell (sMyShellCommand)
End Sub

Любые идеи

Ответы [ 3 ]

1 голос
/ 30 мая 2011

Вы можете передавать аргументы из диалога Macro. Например, если у вас есть этот макрос

Sub myMacro(n As Long)
    MsgBox n
End Sub

Для запуска введите

mymacro 1000

... и нажмите кнопку Run.

1 голос
/ 03 марта 2011

Если я правильно понял ваш вопрос ....

Поскольку в диалоговом окне Macros нет места для ввода параметров, макросы с параметрами просто не отображаются.

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

Например,

Sub NewDocs1
  Dim docType As String
  Dim docTemplate As String

  docType = "the type you want"
  docTemplate = "the template you want"

  NewDocs docType, docTemplate
End Sub

Кроме того, как вы сказали в вопросе, вы хотели, чтобы макрос запускался при нажатии кнопок.Тогда нет необходимости делать макрос видимым в диалоговом окне (которое экономит ваш труд).Просто свяжите это с кнопкой с правильными параметрами.

0 голосов
/ 04 марта 2011

Вы не можете вызывать функции или подпрограммы с параметрами из компонентов пользовательского интерфейса, просто подпрограммы без параметров.Лучшее решение - создать подпрограмму без параметров для каждой кнопки, с которой нужно связать, и вызвать параметризованный подпрограмму или функцию изнутри каждого подпрограммы

...