#excel #vba
Вопрос:
Я пытаюсь запустить макрос в нескольких файлах. Я уже использовал этот скрипт раньше, и он работал, но, может быть, я что-то случайно изменил? Проблема, с которой я сталкиваюсь, заключается в том, что я получаю сообщение об ошибке «PERSONAL.XLSB не может быть найден, возможно ли, что он был перемещен…» Однако я использую полный путь к файлу .xlsb и запускаю макрос из этого файла. Это мой сценарий:
'Sub SHELLforMacros()
Dim wbMatrix As Workbook
Dim strFileName As String
Dim strPath As String
Dim strExt As String
Dim objWorkbook As Workbook
Dim ws As Worksheet
'This is the folder of files it needs to run through:
strPath = "C:UsersmynameDesktopAll_mricgcm3_files45Fall45test"
strExt = "csv"
strFileName = Dir(strPath amp; "*." amp; strExt)
While strFileName <> ""
Set wbMatrix = Workbooks.Open(strPath amp; strFileName)
'Set objWorkbook = ActiveWorkbook
Application.Run "C:UsersmynameAppDataRoamingMicrosoftExcelXLSTARTPERSONAL.XLSB'!Graph_NEW"
wbMatrix.ActiveWorkbook.Save
wbMatrix.Close SaveChanges:=True
strFileName = Dir
Wend
End Sub
Я также попытался поместить файл PERSONAL.XLSB в ту же папку, что и файлы, которые ему необходимо запустить (и изменить путь, чтобы отразить это). И я попытался запустить или запустить его из одного из файлов в папке, а не из ЛИЧНОГО файла.XLSB, не используя полный путь. Я не понимаю, почему его нельзя найти. Спасибо.
Комментарии:
1. У вас нет ни одной ведущей цитаты прямо перед
C:...
этим . Так и должно бытьApplication.Run "'C:UsersmynameAppDataRoamingMicrosoftExcelXLSTARTPERSONAL.XLSB'!Graph_NEW"
.2. Если вы запускаете этот код из Personal.xlsb, вам нужно только позвонить
Graph_NEW
— вам не нужно использоватьApplication.Run
Ответ №1:
Запуск макроса из другой книги может быть простым способом, который я попытаюсь описать на следующем шаге.
Но запуск «макроса в нескольких файлах» не означает никаких изменений с точки зрения вызова макроса. Вы не показали код макрокоманды, но если он ссылается ThisWorkbook
на тот, который должен быть обработан, он должен ссылаться на необходимый ( ActiveWorkbook
или wb
, если ранее он был Set
).
Если «Я запускаю макрос из этого файла» означает запуск макроса из «PERSONAL.XLSB», он должен просто называться как:
Graph_NEW
как это уже было предложено. Если вы настаиваете на использовании Application.Run
, даже если в этом нет необходимости, вы можете попробовать:
Application.Run "Graph_NEW"
Теперь, если вы запускаете код в другой книге и вам нужно запустить макрос из «PERSONAL.XLSB», самый простой способ-использовать:
Application.Run "PERSONAL.XLSB!Graph_NEW"
Конечно, «ЛИЧНЫЙ.XLSB» должен быть открыт.
Если вы настаиваете на использовании полного пути «PERSONAL.XLSB», он также будет работать, и вы можете использовать что-то подобное с тем, что вы пытаетесь. Преимущество заключается в том, что, если книга закрыта, она будет открыта для запуска макроса:
Application.Run
Application.Run "'C:UsersmynameAppDataRoamingMicrosoftExcelXLSTARTPERSONAL.XLSB'!Graph_NEW"
В вашем коде отсутствует префикс "'"
. Он будет работать без него, если в полном пути к книге нет пробелов, но вы должны удалить тот, который был перед «!»… В вашем случае, если «мое имя» не содержит пробелов, оно может отсутствовать.
Вы также можете добавить ссылку на VBAProject «Personal.xlxb» и вызвать макрос, как вы делаете в рабочей книге. Для этого предварительно измените начальное/существующее стандартное имя в чем-то вроде «PersVBProject» (щелкните правой кнопкой мыши проект в VBE «Обозреватель проектов», выберите » Свойства VBAProject…», измените существующее имя и нажмите «ОК»).
Итак, просто назовите это как:
Graph_NEW
Комментарии:
1. Спасибо за ваш ответ, ФанеДуру, но мне это непонятно. Во-первых, спасибо, VBasic2008, что запустил макрос «оболочка». В имени пути не было пробелов, но у меня было окончание «‘» без дополнения. ФанеДуру, я пытаюсь обучить себя VBA через google. Я не являюсь», если вы настаиваете на использовании приложения. Беги, даже если в этом нет необходимости» или «настаивай» на чем-либо другом, в чем нет необходимости. Я бы хотел написать самый современный, эффективный код, но у меня есть проект с крайним сроком и часто 15-летним кодом, который можно найти в Интернете. Я просто пытаюсь делать то, что работает.
2. Я не понимаю, где бы я поставил «Graph_NEW» сам по себе. Я могу выбрать его из ЛИЧНОГО макро-индекса.XLSB, но мне нужно запустить его для 26 000 файлов. Итак, мне нужен файл «оболочки», чтобы вызывать его для каждого файла, или, по крайней мере, так я понимаю. В приведенном выше коде я бы просто удалил всю строку «Application.run…» и поместил «Graph_NEW» в строку сам по себе? Спасибо вам за вашу помощь.
3. Я уже пробовал
Application.Run "PERSONAL.XLSB!Graph_NEW"
Application.Run "Graph_NEW"
, и они не сработали. Я подумал, что, может быть, у меня файл не в том месте или что-то в этом роде, поэтому я выбрал путь.4. @Дэвид Монтана Вы должны внимательно прочитать текст приведенного выше ответа. Чтобы иметь мнение о том, что вы говорите, вам необходимо указать один из двух вариантов: 1. Существует ли код, который вы показываете, как в вопросе, в книге «PERSONAL.XLSB» ? 2. Существует ли он в другой рабочей книге ? С этой точки зрения других альтернатив нет… Тогда что значит «они не работали»? 1. Не запускается ли вызываемый макрос ? 2. Работает ли он, но не делает того, чего вы от него ожидаете? 3. Есть ли какая- либо ошибка в строке кода, вызывающей суб?
5. ФанеДуру, спасибо тебе за твой ответ. 1) Приведенный выше код существует в рабочей книге «PERSONAL.XLSB». Код, который называется «Graph_NEW», также существует в книге «PERSONAL.XLSB». 2) Макрос не был завершен. Это был поиск неисправности в
Application.Run...
линии, которая нуждалась в дополнительном'
. 3) сообщение об ошибке, как я уже сказал в моем втором предложении: «проблема, которую я имею, что я получаю сообщение об ошибке 1004, что » личное.Файл xlsb, не может быть найдена , возможно она была перенесена, и т. д….», Когда я добавил'
, Как VBasic2008 предложил, это сработало. Спасибо вам за вашу помощь.