【问题标题】:Excel: How to call functions in Sheet modules from VbScriptExcel:如何从 VbScript 调用工作表模块中的函数
【发布时间】:2013-12-03 12:43:25
【问题描述】:

使用 VBScript,我正在尝试运行驻留在其中一个代码模块中的子例程。现在这个特定的子调用了其他几个子/函数,包括一些驻留在工作表模块上的子/函数。在调用这些驻留在工作表模块中的潜艇时,我得到错误:

"Sub or Function undefined!"

我该如何解决这个问题?有很多这样的功能,我不想将它们全部从工作表模块移动到代码模块。有没有更好的解决方法?

调用不调用工作表模块上的任何代码的子(驻留在代码模块中)的 VBScript 工作正常,所以我确定是上面的位导致了问题。

【问题讨论】:

  • 是的,它是公开的。当我将代码从工作表模块复制到代码模块然后调用它时,一切正常。

标签: excel vbscript vba


【解决方案1】:

如果您从不同的模块调用子例程或函数,那么您需要确保两件事

  1. 不应将 Sub / Function 声明为 Private
  2. 您可以通过在代码所在的模块名称前加上前缀来调用 Sub / Function

因此,如果您有一个名为 TestSub 的 Sub 并且它位于 Sheet1 的代码模块中,那么您应该像 Sheet1.TestSub 一样调用它。仅使用TestSub 调用它会导致错误Sub or Function not defined

正如 cmets 中所述,工作表的名称并不总是与显示名称相同。您可以从 VBE 中的对象资源管理器中找到工作表的名称

在此示例中,实际工作表名称位于左侧,而显示名称位于右侧。您应该使用左侧的名称来引用工作表。

【讨论】:

  • 值得注意的是,工作表模块的 VBA 代号不一定与工作表的 Excel 显示名称相同。 (事实上​​,在任何非香草工作簿上,它们通常不是)
  • 好点@RBarryYoung。我在答案中添加了更多细节以包含此信息。
猜你喜欢
  • 2014-04-12
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2016-11-08
  • 1970-01-01
相关资源
最近更新 更多