【问题标题】:Run Excel VBA macro from another Excel macro-Error: Can't find PERSONAL.XLSB从另一个 Excel 宏运行 Excel VBA 宏-错误:找不到 PERSONAL.XLSB
【发布时间】:2021-09-27 18:14:51
【问题描述】:

我正在尝试跨多个文件运行宏。我以前使用过这个脚本并且它有效,但也许我无意中改变了一些东西?我遇到的问题是我收到一条错误消息“无法找到 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 运行或启动它,而不使用完整路径。我不明白为什么找不到。谢谢。

【问题讨论】:

  • C:\... 之前没有前导单引号。应该是Application.Run "'C:\Users\myname\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB'!Graph_NEW"
  • 如果您从 Personal.xlsb 运行该代码,那么您只需要调用 Graph_NEW - 您不需要使用 Application.Run

标签: excel vba


【解决方案1】:

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

但是运行“跨多个文件的宏”并不意味着在调用宏方面进行任何修改。您没有显示宏代码,但如果它引用ThisWorkbook 就像要处理的那个,它必须引用需要的那个(ActiveWorkbookwb,如果以前它是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

【讨论】:

  • 感谢您的回复,FaneDuru,但我不清楚。首先,感谢 VBasic2008,让“shell”宏运行。路径名中没有空格,但我确实有一个没有补码的结尾“'”。 FaneDuru,我正在尝试通过谷歌自学 VBA。我不是“如果您坚持使用 Application.Run,​​即使没有必要”或“坚持”任何其他不必要的事情。我很想编写最新、最高效的代码,但我有一个项目有截止日期,而且经常在网上找到 15 年前的旧代码。我只是在尝试做任何有效的事情。
  • 我不明白我会把“Graph_NEW”放在哪里。我可以从 PERSONAL.XLSB 宏索引中选择它,但我需要在 26,000 个文件上运行它。所以,我需要有一个“shell”文件来为每个文件调用它,或者至少这是我的理解。在我上面的代码中,我是否会删除整个“Application.run ...”行并将“Graph_NEW”单独放在一行上?感谢您的帮助。
  • 我已经尝试过Application.Run "PERSONAL.XLSB!Graph_NEW"Application.Run "Graph_NEW",但它们没有奏效。我想也许我把文件放在了错误的地方或什么地方,所以我用了路径名。
  • @David Montana 您必须仔细阅读上述答案的文字。为了对您所说的内容发表意见,您必须指定以下两种选择之一: 1. 您在问题中显示的代码是否存在于“PERSONAL.XLSB”工作簿中? 2. 它是否存在于不同的工作簿中?从这个角度来看,没有其他选择......那么,“他们没有工作”是什么意思? 1. 被调用的宏不运行? 2. 它是否运行,但没有按照您期望的那样运行? 3. 调用 sub 的代码行是否有出现任何错误
  • FaneDuru,感谢您的回复。 1) 上面的代码存在于“PERSONAL.XLSB”工作簿中。正在调用的代码“Graph_NEW”也存在于“PERSONAL.XLSB”工作簿中。 2) 宏没有完成。它发现了Application.Run... 行的错误,这需要一个额外的'。 3) 错误消息是,正如我在第二句话中所说:“我遇到的问题是我收到错误消息 1004,即“无法找到 PERSONAL.XLSB,是否有可能它被移动了,等等……”当我添加 ' 时,正如 VBasic2008 所建议的那样,它起作用了。谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多