【问题标题】:worksheet as vba class module property - runtime error 9工作表作为 vba 类模块属性 - 运行时错误 9
【发布时间】:2015-06-12 13:10:32
【问题描述】:

我有以下名为clsAgent 的vba 类模块:

Option Explicit

Private pAgentSheetName As String
Private pAgentSheet As Worksheet


Public Property Get AgentSheetName() As String
    AgentSheetName = pAgentSheetName
End Property

Public Property Let AgentSheetName(AgentSheetName As String)
    pAgentSheetName = AgentSheetName
End Property


Public Property Get AgentSheet() As Worksheet
    AgentSheet = pAgentSheet
End Property

Public Property Let AgentSheet(AgentSheet As Worksheet)
    pAgentSheet = AgentSheet
End Property

这是我在不同模块中的类实例化:

Sub test_agent_class()
    Dim agent1 As clsAgent
    Set agent1 = New clsAgent

    Set agent1.AgentSheet = Worksheets(agent1.AgentSheetName)
    Debug.Print agent1.AgentSheet.Name
End Sub

但是,当我运行 test_agent_class() 时,我收到一个错误:run-time error 9 subscript out of range。以下行以黄色突出显示:Set agent1.AgentSheet = Worksheets(agent1.AgentSheetName)

我阅读了this answer,但我不明白问题出在哪里,因为agent1.AgentSheetName 是一个字符串。

我做错了什么?

编辑

根据第一个答案,我添加了一行:

agent1.AgentSheetName = "agentsFullOutput.csv"

在类实例化之后。现在我得到一个错误:

Run-time error '91': Object variable or With block variable not set. 

【问题讨论】:

    标签: class excel vba


    【解决方案1】:

    问题是您没有为agent1.AgentSheetName 分配字符串。因此,您尝试将 agent1.AgentSheet 设置为名称为空字符串的工作表。我怀疑你有这样的表。您应该首先为agent1.AgentSheetName 赋值。

    【讨论】:

    • 好电话。我仍然得到一个错误,尽管是一个不同的错误。我将编辑问题。
    • 以下行抛出错误:et agent1.AgentSheet = Worksheets(agent1.AgentSheetName)
    【解决方案2】:

    因为pAgentSheetWorksheet,它是一个对象类型,所以您需要在Property Let 过程中使用Set 来分配它。像这样使用Property Set 而不是Property Let 也可能更清楚:

    Public Property Set AgentSheet(AgentSheet As Worksheet)
        Set pAgentSheet = AgentSheet
    End Property
    

    如果您使用Property Let 过程,则在调用过程时不要使用Set(但在过程中仍需要它),因此调用将是agent1.AgentSheet = Worksheets(agent1.AgentSheetName)

    如果您使用Property Set 过程,那么在调用过程时(以及在过程中)必须使用Set,因此调用将是Set agent1.AgentSheet = Worksheets(agent1.AgentSheetName)

    This VB6 answer 可能会解释得更清楚

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-13
      相关资源
      最近更新 更多