【问题标题】:VBA - Create object to redirect "Write" methodVBA - 创建对象以重定向“写入”方法
【发布时间】:2021-05-31 20:21:15
【问题描述】:

现在我有一个模块,我用“write”方法调用一个对象。

我在代码中执行了 500 个位置,现在我需要支持 2 个对象而不是仅 1 个 - 但我只会根据变量状态写入其中一个对象

原来我得写

If var = 1 Then
 Module1.Obj1.Write("some_data")
Else If var = 0 Then
 Module1.Obj2.Write("some_other_data")
End If

如何创建一个可以基于变量重定向数据的对象,以便我可以这样写:

Module1.ObjX.Write("data_here")

在 ObjX 中,它读取“var”,如果 var = 1 则写入 Obj1,如果 var = 0 则写入 Obj2

'if var = 1 then 
Module1.Obj1.Write("data")
else if var = 0 then
Module1.Obj2.Write("data")

这将使代码更容易理解并节省大量工作:S

【问题讨论】:

  • 在模块中创建函数ObjWrite()并调用该函数;内部函数决定,做什么。
  • var 是全球性的吗?
  • @NickSlash 是的,

标签: vba class object write


【解决方案1】:

做你想做的事的标准方法是创建一个键值对字典。键是选择您需要使用哪个对象来编写的值,与键关联的值是您将使用的对象。下面的代码使用 scripting.dictionary 来实现这一点。

在模块级别

Public myWriter as Scripting.Dictionary

在初始化子程序中

Set myWriter = New Scripting.Dictionary
with myWriter

    .Add 1,Obj1
    .Add 0.Obj2
    .Add 3.Obj3
    ' etc

End With

要调用适当的写入函数,您现在可以使用

myWriter.Item(var).Write(DataValue)

'

【讨论】:

    【解决方案2】:

    通过引用将对象传递给写入函数:

    Sub WriteData(ByRef obj, ByVal data)
        'Write the data using the object here
    End Sub
    
    WriteData(Obj1, "data")
    WriteData(Obj2, "data")
    

    【讨论】:

      【解决方案3】:

      在调用 write 对象之前更改 writervar 的值

      由于 writervar 是全局变量,您可以在代码中的任何位置编辑该值。

      Public writervar as Integer ' global scope
      Public Sub WriteObj(Data)
      Select Case writervar
      Case 0
          ' do stuff
      Case 1
          ' do stuff
      Case Else
          ' error
      End Select
      End Sub
      

      【讨论】:

        猜你喜欢
        • 2012-10-07
        • 2014-03-03
        • 2018-07-06
        • 2016-10-10
        • 1970-01-01
        • 1970-01-01
        • 2015-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多