【问题标题】:vba sub insert text string into class object referencevba sub将文本字符串插入类对象引用
【发布时间】:2014-04-05 00:01:15
【问题描述】:

我对此很陌生,所以如果我搞砸了任何术语,我很抱歉。非常感谢任何人的帮助或想法。

我有以下错误代码:

Sub ExampleSub(text As String)
  ClassObject." & text & "_attribute = 1
End Sub

所以如果我调用 ExampleSub("cheese"),我希望它设置 ClassObject.cheese_attribute 等于 1。

有什么想法吗?我什至不确定这是否可能。

非常感谢!

【问题讨论】:

  • 很确定你不能用这样的文本限定符引用一个对象。您的问题预设了一个不可能的答案。您能否更详细地描述您的数据结构、您要解决的问题等?如果我们对您实际尝试做的事情有更多了解,可能会有更好的解决方案可用。

标签: string class vba object reference


【解决方案1】:

这是另一种可能有效的方法。使用脚本字典对象作为类对象的Properties 之一。 The Dictionary Object is pretty neat,将元素存储在键/值对中,其中键是字符串,值可以是任何其他类型(对象、范围、工作簿、整数、变量/数组等)

因此您可以使用字典对象来包含所有这些命名属性。在您的类模块中,添加如下代码:

Private pAttributes as Object

Sub Class_Initialize()
    '## Initialize this object to avoid a 91 error
    Set pAttributes = CreateObject("Scripting.Dictionary")
End Sub

Public Property Get Attributes() As Object
    Set Attributes = pAttributes
End Property
Public Property Let Attributes(lAttributes As Object)
    Set pAttributes = lAttributes
End Property

然后,在您的代码中,您可以简单地执行以下操作:

Sub ExampleSub(text As String)
  ClassObject.Attributes(text) = 1
End Sub

如果项目尚不存在,调用字典键会自动添加项目,但如果您想要更多控制权,您可以这样做:

Sub AnotherExample(text as String)
    If ClassObject.Attributes.Exists(text) Then
        MsgBox text & " already exists!", vbInformation
    Else:
        ClassObject.Attributes(text) = 1
    End If
End Sub

【讨论】:

  • 非常整洁。谢谢!我已经在这里玩过示例代码,到目前为止,我认为没有理由这不起作用。在接下来的几天里,我将在我的实际项目中试一试。如果可行,我将关闭此案例并将其标记为已解决。非常感谢!
  • @Logan 你有机会评论这个吗?如果是这样,请考虑接受这个答案...
  • 抱歉耽搁了。会做!非常感谢你的帮助。这是一个非常强大的方法!!
  • 不用担心,我问的原因是因为其他人也有类似的问题,我也想向他们推荐这个可能的解决方案。干杯!
猜你喜欢
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多