2010-05-10 6 views
7

У меня есть макрос, который находится на сервере. Мне нужно иметь возможность запускать его с разных рабочих станций, которые подключаются к этому серверу.работает excel макрос от другой книги

В настоящее время я делаю:

Application.Run ("L:\database\lcmsmacro\macro1.xlsm!macro_name") 

Сообщения об ошибке я получаю «Макрос не может быть недоступен в этой рабочей книге # 1004»

я уже убедился, что мои настройки безопасности установлен на самом низком уровне.

Как запустить макрос из другой книги, размещенной на другом сервере?

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

ответ

17

Я думаю, что ваш синтаксис отсутствует одинарные кавычки:

Application.Run ("'L:\database\lcmsmacro\macro1.xlsm'!macro_name") 

Затем, если вам нужно передать ему параметры синтаксис будет выглядеть так:

Application.Run ("'L:\database\lcmsmacro\macro1.xlsm'!macro_name","param1","param2") 
+1

почему мне нужны одинарные кавычки? –

+5

Его стандартный синтаксис для связывания любых книг для Excel, которые закрыты. Например, если вы связали ячейку с другой ячейкой в ​​другой закрытой рабочей книге, синтаксис будет выглядеть так: 'C: \ Documents and Settings \ mnbtjf01 \ Desktop \ [myWorkbook.xls] Sheet1'! $ F $ 15 Вы также можете пойти дальше, если вам нужно больше контролировать сетевую таблицу. Вот хороший ресурс: http://www.vbaexpress.com/kb/getarticle.php?kb_id=279 – Fink

+0

Если есть переменные для SheetName, тогда мы можем использовать - Application.Run "'" & ExcelSheetName & "' ! имя_макрос» – OverrockSTAR

1

Эта ошибка также показывает когда есть дубликаты имен макросов в удаленной книге, например два макроса с именем «macro_name». Взял меня, чтобы узнать!

0

Как правило, в именах требуется одиночный ', если у вас есть пробел или знаки препинания в имени, так что Excel не путается, думая, что это пространство преднамеренное разделение, например, при разделении аргументов метода. В некоторых случаях Excel будет настаивать на них. Обычно они не вредят их включению, даже если они не нужны, например, если в именах нет пробелов. Иногда Excel извлекает их, если они не нужны. http://www.eileenslounge.com/viewtopic.php?f=27&t=25599

0

Если макрос вам необходимо найти относительные макросъемки пути с помощью рабочей книги пути, из которого вы запускаете макрос, и вам необходимо запустить несколько макросов из списка массива, приведенный ниже код поможет:

Dim relativePath As String, programFileName As String 
Dim selectedProgramsFiles() As String, programsArrayLastIndex As Byte, I As Byte 

For I = 0 To programsArrayLastIndex 'Loop through all selected programs 
    programFileName = selectedProgramsFiles(I) 
    relativePath = ThisWorkbook.Path & "\" & programFileName 
    Workbooks.Open Filename:=relativePath 

    Application.Run ("'" & relativePath & "'!ModuleName.Main") 

    Workbooks(programFileName).Activate 
    ActiveWorkbook.Close SaveChanges:=False 
Next I 'For I = 0 To programsArrayLastIndex 'Loop through all selected program 
Смежные вопросы