首页 > 解决方案 > 从另一个 Excel 宏运行 Excel VBA 宏-错误:找不到 PERSONAL.XLSB

问题描述

我正在尝试跨多个文件运行宏。我以前使用过这个脚本并且它有效,但也许我无意中改变了一些东西?我遇到的问题是我收到一条错误消息“无法找到 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:\Users\myname\Desktop\All_mricgcm3_files\45\Fall45\test\"
      strExt = "csv"

      strFileName = Dir(strPath & "*." & strExt)

      While strFileName <> ""
      
           Set wbMatrix = Workbooks.Open(strPath & strFileName)
           'Set objWorkbook = ActiveWorkbook

         Application.Run "C:\Users\myname\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB'!Graph_NEW"

           wbMatrix.ActiveWorkbook.Save
           wbMatrix.Close SaveChanges:=True

            strFileName = Dir
      Wend
End Sub

我还尝试将 PERSONAL.XLSB 文件放入与其需要运行的文件相同的文件夹中(并更改路径以反映这一点)。我尝试从文件夹中的一个文件而不是从 PERSONAL.XLSB 运行或启动它,而不使用完整路径。我不明白为什么找不到。谢谢。

标签: excelvba

解决方案


从另一个工作簿运行宏可以很简单,我将在下面的步骤中尝试描述。

但是运行“跨多个文件的宏”并不意味着在调用宏方面进行任何修改。您没有显示宏代码,但如果它引用ThisWorkbook了要处理的那个,它必须引用需要的那个(ActiveWorkbook或者wb,如果以前它是Set)。

如果“我正在从该文件运行宏”意味着“PERSONAL.XLSB”运行宏,它应该简单地称为:

  Graph_NEW

正如已经建议的那样。如果您坚持使用Application.Run,即使没有必要,您也可以尝试:

  Application.Run "Graph_NEW"

现在,如果您在不同的工作簿中运行代码并且需要从“PERSONAL.XLSB”运行宏,最简单的方法是使用:

  Application.Run "PERSONAL.XLSB!Graph_NEW"

当然,“PERSONAL.XLSB”应该是打开的。

如果您坚持使用“PERSONAL.XLSB”完整路径,它也可以工作,您可以使用与您正在尝试的类似的东西。优点是,如果工作簿关闭,它将打开运行宏

Application.Run 
  Application.Run "'C:\Users\myname\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB'!Graph_NEW"

您的代码缺少前缀"'"。如果工作簿完整路径中不存在任何空格,则它可以工作,但是您应该删除“!”之前的那个...在您的情况下,如果“myname”不包含任何空格,则它可能会丢失。

您还可以添加对“Personal.xlxb” VBAProject的引用并像在工作工作簿中一样调用宏。为此,之前更改初始/现有标准名称,例如“PersVBProject”(右键单击 VBE 的“项目资源管理器”中的项目,选择“VBAProject 属性...”,更改现有名称并按“确定”) .

所以,简单地称之为:

   Graph_NEW

推荐阅读