【问题标题】:Excel VBA, Get the value of a private worksheet constantExcel VBA,获取私有工作表常量的值
【发布时间】:2014-04-12 18:09:49
【问题描述】:

我想通过 VBA 检索工作表代码级私有常量的值。我正在尝试做一些类似于在我的工作表上放置可通过 VBA 访问的“标签”的事情。我想在 VBAProject 中使用 CodeModule,这样我就可以拥有许多“标签”,而不仅仅是一个。即使在网上查看了很多代码和论坛之后,我也无法弄清楚如何获取常量。有人对此有任何见解吗?我在 Windows 8.1 机器上运行 Excel 2013。

【问题讨论】:

  • 需要是一个私有常量吗?

标签: vba excel


【解决方案1】:

也许最简单的方法是使用一个函数,该函数可以使用公共访问器方法获取私有常量的值。例如,如果您的工作表中有以下代码Sheet1

Private Const myValue = "the answer is 42"

Public Function getSecret()
  getSecret = myValue
End Function

然后你可以从另一个模块访问它

Sub test()
    Dim sheetName = "Sheet1"
    MsgBox "The sheet says that " & Sheets(sheetName).getSecret()
End Sub

你可以让这个更有趣——你可以创建一组标签并将它们编入索引……但我认为这超出了你的问题。请注意,当访问器宏位于工作表中时,您必须“完全限定”访问器宏的名称;好处是你可以使用相同的函数来检查不同工作表的标签,只需更改sheetName

【讨论】:

  • 谢谢,弗洛里斯!奇迹般有效!我很好奇创建标签集合并将它们编入索引。如果您有时间并且可以发布有关该内容的信息,那就太好了!如果没有,那也没关系。我很高兴为您提供的问题提供解决方案。谢谢!
  • Floris,在将其合并到我的代码中时,我发现了一个“皱纹”。在此代码中:For Each sht In ThisWorkbook.Sheets shtName = sht.Name On Error Resume Next shtType = sht.GetShtType() If Err.Number = 0 Then,我在 .GetShtType() 行上收到未找到方法或数据成员错误。有什么建议么?我希望能够检查工作表类型条件。还是我需要每张纸都有一个类型?请指教。
  • @user3525243 很高兴这个想法对你有用。至于您看到的错误:这很奇怪 - 我原以为您的 On Error 应该防止错误出现(Err.Number 变量除外)。也许您可以通过此处的链接发布一个关于此的新问题 - 很难从 cmets 中的代码工作。您意识到您在每个工作表中都需要此代码,对吧?
  • 我找到了解决方法。我认为代码不喜欢声明,因为我在所有工作表中都没有 .GetShtType() 代码。不过,我不希望所有工作表中的代码,只是我想为其分配类型的那些工作表。解决方法是将“shtType”代码行更改为shtType = wb.Sheets(shtName).GetShtType(),其中 wb 是有问题的工作簿,而 shtName 是要检查的工作表的名称。这确实有效,而且效果很好,只是有点“麻烦”。布赖恩
【解决方案2】:

我会将代码导出到 .BAS 文件。然后,您可以将材料作为文本文件读回并检索常量

【讨论】:

    猜你喜欢
    • 2021-07-28
    • 2021-10-09
    • 2014-08-07
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多