【问题标题】:Can't Call Method of Custom Class Object Excel VBA无法调用自定义类对象Excel VBA的方法
【发布时间】:2017-03-29 10:26:58
【问题描述】:

我正在编写一些用于调度自动化的代码。我对 VBA 编程比较陌生,但多年来一直在用其他语言编程。对于我的项目,我创建了一个名为 OpsFloor 的类,它应该模拟操作层。我正在将用户信息解析为一个数组并尝试将该数组(我尝试过将整个数组和单个值都传递)传递到 OpsFloor 对象的一个​​实例中。我担心我对 VBA 中的类如何工作有一些基本的误解。下面是类中的子

Public Sub SetProcessMatrixValue(x As Integer, y As Integer, value As Integer)
    ProcessMatrix(x, y) = value
End Sub

这是来自 Excel 中工作表对象 sub 内的调用:

Option Explicit
Private OperationMatrix(18, 8) As Integer
Private dailyWF As New OpsFloor
Public Sub StartingWorksheet()
...
dailyWF.SetProcessMatrixValue 0, 0, 30
End Sub

当我尝试运行子程序以通过 SetProcessMatrixValue 方法将这些值分配给类实例时,我得到运行时错误“438”对象不支持此属性或方法。

【问题讨论】:

  • 对不起,我是个菜鸟,但我不确定你从哪里得到的代码。
  • 抱歉,那是我的代码 :) 是否发生在 dailyWF.SetProcessMatrixValue 0, 0, 30 行上
  • 我真的想通了。由于构造函数代码中的错误,我的类没有正确实例化,但是因为我使用了Private dailyWF As New OpsFloor 而不是Dim dailyWF As OpsFloor:Set dailyWF = New OpsFloor 一旦我切换它,它就指向了构造函数中的错误(添加到集合时不必要的括号) 现在它运行完美。

标签: excel vba class methods


【解决方案1】:

因此,在拼凑了许多不同的帖子后,我设法发现了几个问题。

首先是我最初声明类变量的方式:

Private dailyWF As New OpsFloor

这没有正确地实例化类对象。当我尝试将其更改为以下内容时:

Private dailyWF As New OpsFloor
Set dailyWf = New Operations_Floor

我收到一个错误,指向类构造函数。它最终成为我如何将对象分配给集合的问题。

newCollection.Add(new Object) //WRONG!
newCollection.Add new Object //Right!

对于像我这样的其他新手,我发现一篇帖子建议通过转到工具>选项>常规>课堂模块中断来打开“课堂模块中断”。这向我表明错误在类构造函数内部,实际上并不是我打电话的方式的问题。

【讨论】:

  • “打破课堂模块”我敢肯定,这只是节省我的时间。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 2015-06-17
相关资源
最近更新 更多