【问题标题】:Call Subroutine from a string value VBA从字符串值VBA调用子程序
【发布时间】:2017-12-15 17:53:53
【问题描述】:

尝试使用字符串调用此子例程。我已经尝试过 Application.Run 就像我在网上阅读的那样,但这似乎不起作用。 变量元素将循环遍历并表示不同的状态代码。所以我有名为“CA_Config”、“GA_Config”、“AZ_Config”等的潜艇。

Dim strSubToCall As String
strSubToCall = element & "_Config()"
Application.Run strSubToCall

状态子程序非常不同,因此需要不同的子程序。其他子和调用其他子的主子都是公开的。

下面的 CA 子示例

Public Sub CA_Config()

Dim rngLastHeader As Range
Dim intLastRow As Integer
Dim i As Integer
intLastRow = Sheet1.currWS.UsedRange.Rows.Count
Set rngLastHeader = Sheet1.currWS.Range("A1").End(xlToRight)

rngLastHeader.Offset(, 1).Value = "Use Tax Reversal Needed"

Sheet1.currWS.Range("X:X").EntireColumn.Copy
Sheet1.currWS.Range("Y:Y").PasteSpecial xlPasteFormats
Sheet1.currWS.Range("Y:Y").Columns.AutoFit

End Sub

【问题讨论】:

  • 去掉括号()
  • 也许,Sub 在另一个模块中,Private?
  • 定义“似乎不起作用”
  • 不是每个状态都有不同的子,而是有一个带有参数的 一个 子....即Sub StateConfig("CA")这些“状态子”中的每一个有多大不同?
  • Sub 前面加上模块名称。例如,Application.Run "Module1.MySub"

标签: vba excel


【解决方案1】:

删除括号并在您的子名称前加上模块名称。例如,Application.Run "Module1.MySub"

【讨论】:

  • @Mat'sMug 请关注问题下方的 cmets - 括号是我提到的第一件事。
  • 确实,看起来像一个错误。但不在 VBE 中 - Application.Run 完全是 Excel 的对象模型。所以,这是 Excel 中的错误,而不是 VBE 中的错误。但如果你告诉微软,我敢打赌他们会称其为功能 ;-)
  • 另一个有趣的地方:Public Sub Sub1234() 列在 Excel 的“宏”列表中,但宏对话框的“运行”按钮在被选中时被禁用,这证实了我长期以来对 Excel 的“运行宏”的怀疑" 工具在后台使用Application.Run使用有意义的名称的另一个好理由!
  • Sub1Sub1048576 将不起作用,但使用 2^20 以上的编号方案,Sub1048577 将正常工作。很明显吧?
  • @MathieuGuindon 哦,等等,duh,“Sub1”是一个有效的单元格地址,其中Application.RunMacro 参数可以一个范围(大概是为了方便 Excel4 宏?),并且(根据帮助)当该参数是一个字符串时,它位于活动工作表的上下文中。另一个例子是 Excel 在 2007 年增加了行数/列数。Rubberduck VBA 需要处理大量新的检查 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-02
  • 2018-06-23
  • 2017-02-09
  • 2015-07-15
相关资源
最近更新 更多