Почему макрос из другой книги был бы недоступен после разрешения макросов? Запуск макроса из другой книги vba


vba - Запуск макроса из другой рабочей книги

У меня есть макрос в книге A, который вызывает макрос в книге B. Я хочу, чтобы макрос в рабочей книге B выполнялся, а затем я хочу закрыть книгу B. Я продолжаю получать сообщение о том, что макрос не может быть найден, что я хочу запустить из workbook B. Я в значительной степени новичок в этом, но я сделал довольно тщательный поиск и ничего не смог придумать. Вот мой код целиком.

Public Sub InputDept() Dim Cap As Workbook Dim Cap2 As String On Error Resume Next Set Cap = Workbooks("NGD Source File for Net Budget Reporting.xlsx") Cap2 = Cap.Name On Error GoTo 0 Dim wb As Workbook Dim Cap1 As Variant Application.ScreenUpdating = False If Cap Is Nothing Then Cap1 = Application.GetOpenFilename("Excel Files(*.xl*)," & "*.xl*", 1) If Cap1 = False Then Exit Sub End If Set wb = Workbooks.Open(Cap1) Cap2 = ActiveWorkbook.Name Else Workbooks(Cap2).Activate End If Sheets("Dept Summary").Activate Cells.Find(What:="Direct", after:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Offset(1, 0).Select Range(Selection, Selection.End(xlDown)).Select Dim cRng As Range Dim dRng As Range Set dRng = Selection For Each cRng In dRng If cRng.Interior.ThemeColor = xlThemeColorAccent3 Then Dim mCalc As String Dim mSum As Workbook On Error Resume Next Set mSum = Workbooks("Master Calc with Macro.xlsm") mCalc = mSum.Name On Error GoTo 0 Application.ScreenUpdating = False If mSum Is Nothing Then mSum1 = Application.GetOpenFilename("Excel Files.xl*),"& "*.xl*", 1) If mSum1 = False Then Exit Sub End If Set wb1 = Workbooks.Open(mSum1) mCalc = ActiveWorkbook.Name Else Workbooks(mCalc).Activate End If cRng.Copy Workbooks(mCalc).Activate Sheets("Data").Select Range("A5").Select Selection.PasteSpecial Paste:=xlPasteValues Sheets("Report").Activate Workbooks(mCalc).Application.Run ("!SummarizeMaster") Sheets("Report").Select ActiveSheet.Copy Cells.Select Cells.Copy Selection.PasteSpecial Paste:=xlPasteValues ActiveWorkbook.SaveAs _ Filename:=Application.ThisWorkbook.Path & "\" & Format(Date - 28, "MMM") & " Files\" & Left(cRng, 7) & ".xlsx" ActiveWorkbook.Close Workbooks(mCalc).Close savechanges:=False End If Next cRng End Sub задан JudeD 10 дек. '15 в 23:51 источник поделиться

qaru.site

vba - Запуск макроса excel из другой книги с динамическим расположением пути к файлу

Поэтому у меня есть макрос в Worksheet1, который открывает другой файл (Worksheet2), а затем копирует и вставляет конкретную ячейку и переносит из Worksheet1 в Worksheet2.

Как только макрос Worksheet1s будет скопирован в ячейки с Worksheet1 на Worksheet2, тот же макрос из Worksheet1 будет запускать другой макрос (который встроен в Worksheet2) для запуска.

У меня есть коды, работающие с открытием Worksheet2, копирование и вставка данных из рабочего листа1 в рабочий лист2, единственной проблемой является макрос в Worksheet1 для запуска макроса, встроенного в Worksheet2.

Sub FCY() ' ' Macro3 Macro ' Dim MainFile As Workbook Dim jnl As Workbook Dim RF As Workbook Dim FileExt As String Set MainFile = ActiveWorkbook 'FileExt - Cells where is Worksheet2 being saved (example: Worksheet2.xls) FileExt = Sheets("REF Data").Cells(25, 7).Value & "." & Cells(25, 9).Value 'Set jnl - a command to open the Worksheet2 by using the "FileExt" plus the File Location 'which is entered in Cells (22,7) or Range("G22") (example - C:\Documents\Worksheet2.xls) Set jnl = Workbooks.Open(Worksheets("REF Data").Cells(22, 7).Value & "\" & FileExt) 'Selecting the specified cells to copy and paste from Worksheet1 to Worksheet2 MainFile.Activate Sheets("FCY").Select Range("B11:BJ11").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy jnl.Activate Range("B11:BJ11").Select ActiveCell.PasteSpecial xlPasteValues 'Command which runs another Macro embedded in Worksheet2 'Incorrect code to run the macro in Worksheet2 Application.Run (Worksheets("REF Data").Cells(22, 7).Value & "\" & FileExt & SaveAstab) ' End Sub

Я уже знаю, что этого можно добиться с помощью этого кода:

Application.Run ("'C:\Documents\Worksheet2.xls'!SaveAstab")

Примечание. SaveAstab - это имя макроса в Worksheet2

Но если вы заметили, что имя файла + имя файла + имя добавочного номера вводится пользователями в определенные ячейки. Я имею в виду, что данные о местоположении файла + имя файла + имя добавочного номера являются динамическими и вводятся пользователями.

Моя проблема заключается в том, что я вызываю ячейки, которые я назначил для местоположения файла + имя файла + расширение, у меня ошибка (ошибка времени выполнения 9).

‘Incorrect code to run the macro in Worksheet2 Application.Run (Worksheets("REF Data").Cells(22, 7).Value & "\" & FileExt & SaveAstab)

Может ли кто-нибудь поделиться своим опытом по этому вопросу? большое спасибо

qaru.site

vba - Запуск макроса на вновь созданный файл .xlsx из другой книги

Я открываю и конвертирую CSV в файл .xlsx на общем диске. После создания .xlsx он остается открытым. Макросы для этого также находятся в мастер-книге, расположенной на общем диске. Прямо сейчас я установил для пользователя, чтобы открыть книгу и выбрать командную кнопку, которая открывает и преобразует файл.

Пользователь выбирает шаблон, необходимый из списка, и нажимает на вторую командную кнопку, которая запускает следующий макрос, который вызывает конкретный макрос, который преобразует только что созданный .xlsx в правильный формат.

Все мои макросы работают, кроме макроса ниже. Он останавливается в первых книгах. Сейчас недавно созданный .xlsx является единственным .xlsx в своей папке, но в конечном итоге может быть несколько файлов .xlsx, созданных из нескольких CSV-файлов.

Sub Run_Macros() 'IF USER SELECTED FXX_Rejects If Range("A8").Value = Range("A2").Value Then 'ACTIVATE OTHER WORKBOOK Workbooks("*.xlsx").Activate Workbooks("*.xlsx").Sheets("Sheet1").Select 'AND THEN RUN APPROPRIATE MACRO Call aaLayout 'IF USER SELECTED LXX_Rejects ElseIf Range("A8").Value = Range("A3").Value Then 'ACTIVATE OTHER WORKBOOK Workbooks("*.xlsx").Activate Workbooks("*.xlsx").Sheets("Sheet1").Activate 'AND THEN RUN APPROPRIATE MACRO Call abLayout 'IF USER SELECTED HXXXX_Rejects ElseIf Range("A8").Value = Range("A4").Value Then 'ACTIVATE OTHER WORKBOOK Workbooks("*.xlsx").Activate Workbooks("*.xlsx").Sheets("Sheet1").Activate 'AND THEN RUN APPROPRIATE MACRO Call acLayout 'IF USER SELECTED SXXX_Rejects ElseIf Range("A8").Value = Range("A5").Value Then 'ACTIVATE OTHER WORKBOOK Workbooks("*.xlsx").Activate Workbooks("*.xlsx").Sheets("Sheet1").Activate 'AND THEN RUN APPROPRIATE MACRO Call adLayout End If End Sub

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

Sub CSVFiles() Dim MyFiles As String, ThisMonth As String Dim startPath As String Dim wb As Workbook ThisMonth = Format(Date, "mmmm") startPath = "\\XXX\2017\" & ThisMonth & "\" MyFiles = Dir(startPath & "*.csv") Do While MyFiles <> "" Set wb = Workbooks.Open(startPath & MyFiles) Call XLSXConvert 'Converts all csv files, saves and closes files. Prepares files for full template creation. wb.SaveAs fileName:=startPath & Replace (MyFiles, ".csv", ".xlsx"),FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False wb.Close MyFiles = Dir Loop End Sub

stackoverrun.com

Вызов процедур VBA из других рабочих книг Excel

В прошлой статье мы уже разбирали работу с процедурами и их вызовы в пределах одной рабочей книги и модулей. Для удобства использования одних и тех же процедур в разных рабочих книгах Excel их можно собрать в одну книгу макросов и в дальнейшем обращаться к ней вызывая эти процедуры. Т.е. книга Excel будет выступать в роли библиотеки процедур и функций, которые Вы разрабатываете для проведения некоторых расчетов. 

Как вызвать процедуру из другой книги Excel?

В арсенале VBA Excel есть два способа вызвать процедуру из другой книги:

  1. Установить связь с книгой и работать как с обычным модулем;
  2. Воспользоваться методом Run с явным указанием пути к книге.

Рассмотрим первый способ. Создадим две книги: library.xls и Exec_Book.xls.В книге library.xls создадим модуль с процедурой "Сообщение":

Sub Сообщение()  msgbox "Процедура запущена!"End Sub

Так же, зададим имя нашего VBA проекта, для этого в окне Project Explorer (ctrl+R), щелкните по названию проекта в нашей книге Library (VBAProject(Library.xls) и в окне свойств (Properties Window (F4)) замените Name на свое имя. Я назвал как "My_Library":

Сохраняем, закрываем книгу.

Теперь переходим к книге Exec_Book.xls. Открываем VBE редактор (alt+F11).

Для того чтоб процедуры и функции другой книги стали доступны, в книге которая будет вызывать процедуры (в нашем случае Exec_Book.xls) необходимо создать ссылку на книгу с процедурами (Library.xls). Ссылка устанавливается следующим образом: Tools - References

В открывшемся окне щелкните по кнопке Browse и укажите наш файл Library.xls. Не забудьте изменить фильтр "Тип файла" на "Microsoft Office ...."

В окне References появится новая связь "My_Library"

Жмем ОК. Все. Теперь мы можем вызвать нашу процедуру любым способом, описанным в этой статье.

Например:Sub Test()  Сообщение  My_Library.Module1.Сообщение  Call СообщениеEnd Sub

Обратите внимание. Что при открытии книги Exec_Book.xls, Library.xls автоматически открывается.

Вызов процедур с помощью метода Run работает только при открытой рабочей книге содержащей процедуры(в нашем случае Library.xls). Вызов происходит следующим образом:

Sub TestRun ()    Application.Run "'Library.xls'!Сообщение"End Sub

т.е. мы указываем имя открытой книги и имя процедуры которую вызываем из этой книги. Данный метод не требует создания связи, но книга Library.xls должна быть заранее открыта.

Все!

www.programm-school.ru

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

Итак, я провел много исследований по этому вопросу, и мой код еще не работает. Согласно названию, проблема заключается в следующем:

Я вытягиваю отчет данных с сайта, этот отчет загружается как.xlsx файл. Я создал макрос на ленте, поэтому, когда я нажму на него, он откроет другую книгу и запустит этот макрос. Код, который я использую, приведен ниже:

Option Explicit Sub NotHardAtAll() Dim ws As Worksheet, Dim wb As Workbook Set wb = ActiveWorkbook Set ws = ActiveSheet Workbooks.Open Filename:="C:\Users\a0c27n\Desktop\Projects\incident_extended_report1.xlsm" 'With Sheets("Sheet4").Activate '*Not sure if this is enter code here necessary...at all* Application.Run "!ADDHMKRFID" 'End With End Sub

Я пробовал поместить путь перед макросом (например, Application.Run"'incident_extended_report1.xlsm!ADDHMKRFID"), но он не работает ни *

Я знаю, по крайней мере, из исследования, которое я сделал, чтобы я мог просто использовать метод "Application.Run", однако я не мог заставить его получить доступ к правильному листу.

Когда я запускаю макрос, он вытаскивает ошибку "1004" во время выполнения, "400", или он больше всего тянет: "Не удается запустить макрос"! ADDHMKRFID. Макрос может быть недоступен в этой книге или все макросы могут быть отключены ".

Файл, который я пытаюсь извлечь из макроса, находится ниже:

Название рабочей книги: инцидент_extended_report1.xlsm

Имя рабочего листа: Sheet4 (TEST MACRO)

Имя макроса: Sub ADDHMKRFID() End Sub

Я понимаю, что C:\не является общей сетью, из которой я буду работать, будет S: \, однако я не уверен, сколько информации я могу опубликовать из-за конфиденциальности. Пожалуйста, спросите о каких-либо разъяснениях или вопросах, которые могут возникнуть у вас. Я застрял немного и не уверен, что я делаю неправильно. Заранее спасибо!

qaru.site

Почему макрос из другой книги был бы недоступен после разрешения макросов?

У меня есть файл .xlsb, который я запускаю на другом компьютере после определения переменной paths и зависит от ее текущего местоположения. Я добавил проект VBA другого xlsm-файла в .xlsb. И я пытаюсь запустить макрос из Модуля 2 файла .xlsb либо с одним из следующих строк в следующем коде:

Dim path As String path = Application.ActiveWorkbook.path path = path & "\" Workbooks("2cDataSet.xlsm").Activate 'MsgBox (path & "2cDataSet.xlsm!publicdatahandler") 'Application.Run (path & "2cDataSet.xlsm!publicDataHandler") 'Application.Run (path & "'2cDataSet.xlsm'!publicDataHandler") 'Application.Run (path & "2cDataSet.xlsm!Module2.publicDataHandler") 'Application.Run (path & "'2cDataSet.xlsm'!Module2.publicDataHandler") 'Application.Run ("2cDataSet.xlsm!publicDataHandler") 'Application.Run ("'2cDataSet.xlsm'!publicDataHandler") 'Application.Run ("2cDataSet.xlsm!Module2.publicDataHandler") 'Application.Run ("'2cDataSet.xlsm'!Module2.publicDataHandler") 'Application.Run "2cDataSet.xlsm!publicDataHandler" 'Application.Run "'2cDataSet.xlsm'!publicDataHandler" 'Application.Run "2cDataSet.xlsm!Module2.publicDataHandler" 'Application.Run "'2cDataSet.xlsm'!Module2.publicDataHandler" 'Application.Run path & "2cDataSet.xlsm!publicDataHandler" 'Application.Run path & "'2cDataSet.xlsm'!publicDataHandler" 'Application.Run path & "2cDataSet.xlsm!Module2.publicDataHandler" 'Application.Run path & "'2cDataSet.xlsm'!Module2.publicDataHandler" 'Run macro:="2cDataSet.xlsm!Module2.publicdatahandler" 'Run macro:="2cDataSet.xlsm!publicdatahandler"

Это, кажется, та же проблема, как и здесь, за исключением того, я ожидаю, проблема в этом случае быть вызвана слиянием 2 различных файлов первенствовать, а не оон-enabledness из макросов:

Cannot run the macro... the macro may not be available in this workbook

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

  1. Нажмите кнопку Microsoft Office и выберите пункт «Параметры Excel».
  2. Нажмите Центр доверия.
  3. Нажмите Настройки центра клиентов.
  4. Нажмите «Настройки макроса».
  5. Нажмите, чтобы установить флажок Доверять доступ к объектной модели проекта VBA.
  6. Нажмите «ОК», чтобы закрыть диалоговое окно «Параметры Excel».
  7. Закрыть и вновь открыть Excel.

я нажал «включить кнопки макрокоманд выше этого objectmodel флажка.

Я попробовал сначала вручную открытия 2cDataSet.xlsm первого и включение вручную, когда побудили макросы, а затем открыть родительский .xlsb и в другом направлении (где .xlsm автоматически открывается без запроса активирующих макросов после включения макросов для .xlsb)

И я думаю, что я пробовал правильный синтаксис в любом из вариантов, которые были пробованы. * К настоящему времени Я также знаю, что сингл используется только в том случае, если имя содержит пробелы.

Я не удалял макрос и не воссоздавал его.

Я проверил ли «вариант явно» не было написано как «варианты явными», но это не было написано на всех

саб общественности.

Офис, который я написал, был в 2016 году, версия на другом компьютере - 2013 год, но я получил ту же ошибку в офисе 2016 года, но для некоторых, для меня неизвестная причина, иногда после переключения вызова sub синтаксис или повторное открытие файла excel, ошибка больше не возникала или не выполнялась последовательно.

Любые предложения о том, почему первенствует дает следующее сообщение об ошибке:

cannot run the macro the macro may not be available in this workbook or all macros may be disabled

после подразделов называются?

Ps. Это для распределенного автоматизированного вычисления, поэтому я не смогу отредактировать настройки ПК (или excel), а всплывающие окна - нето :)

Проблема заключалась в том, что после слияния проектов vba Excel сохранил ссылку на.xlsm в старую папку, даже если родительский файл .xlsb был скопирован и перенесен на другой путь.

Решение в настоящее время проверяется, как существо: Moving исходный файл в папку нового родительского файла и обмена, что вся папка с фактическим .xlsm включен, работать на другом компьютере

stackoverrun.com

Запуск идентичного макроса из другой книги MS Excel онлайн

Сначала позвольте мне объяснить, почему я задаю этот вопрос, поэтому его ясность в том, что мне нужно больше, чем команда Application.run . Если у кого-то есть способ решить проблему другими способами, это тоже будет хорошо.

Я создал программу, которая создаст новый файл excel с макросами и кодами, которые являются новой программой на ее основе. Я сделал это, потому что я не хочу, чтобы исходный файл менялся. Исходный файл является шаблоном для всех новых созданных файлов.

Но когда я запускаю свой код, я получаю много ошибок с именами листов, которые не находятся в исходном файле, но находятся в новом файле. Таким образом, в какой-то Activeworkbook меняет работу Activeworkbook и я не знаю почему. Когда я запускаю код, я сменил Activeworkbook на новый файл.

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

Поэтому мой вопрос : есть ли способ запуска макроса с идентичным именем из другой книги в VBA-Excel. Важно, чтобы этот макрос получал доступ только к макросам из собственной книги!

заранее спасибо

Solutions Collecting From Web of "Запуск идентичного макроса из другой книги"

Я считаю, что следующее показывает, что вам нужно сделать.

Я создал две книги: «TryDup1.xls» и «TryDup2.xls».

«TryDup1.xls» содержит следующий код в модуле:

Option Explicit Sub CtrlDup() Dim PathCrnt As String Dim WBookOrig As Workbook Dim WBookOther As Workbook Call DupMac(1) Set WBookOrig = ActiveWorkbook PathCrnt = ActiveWorkbook.Path & "\" Set WBookOther = Workbooks.Open(PathCrnt & "TryDup2.xls") Call Application.Run("TryDup1.xls!DupMac", 2) Call Application.Run("TryDup2.xls!DupMac", 3) WBookOther.Close SaveChanges:=False Call DupMac(4) End Sub Sub DupMac(Param As Long) Debug.Print "TryDup1's DupMac: Param=" & Param End Sub

«TryDup2.xls» содержит следующий код в модуле:

Option Explicit Sub DupMac(Param As Long) Debug.Print "TryDup2's DupMac: Param=" & Param End Sub

Открытие «TryDup1.xls» и выполнение CtrlDup () приводит к тому, что следующее окно выводится в окно Immediate:

TryDup1's DupMac: Param=1 TryDup1's DupMac: Param=2 TryDup2's DupMac: Param=3 TryDup1's DupMac: Param=4

Итак, макрос CtrlDup () может запускать любую версию макроса DupMac ().

excel.bilee.com