【发布时间】:2017-02-06 18:53:41
【问题描述】:
请原谅代码中的任何愚蠢错误,因为这是我第一次尝试使用类,而且我在网上找不到任何教程将它放在像我这样的傻瓜的真正、真正简单的术语中。我尽力遵循https://msdn.microsoft.com/en-us/library/aa716315(v=vs.60).aspx 的 MS 指南,但我并不真正理解我在做什么,这使得我很难解释我应该改变什么。
我正在尝试创建一个存储三段数据、两个整数和一个字符串的类。我把它放在一个名为tdata的类模块中:
Sub tdata()
Dim tnumber As Integer, tacct As Integer
Dim ttype As String
Public Property Get t_acct() As Integer 'don't forget the account number!
t_acct = tacct
End Property
Public Property Let t_acct(ByVal newval As Integer)
t_acct = newval
End Property
Public Property Get t_numb() As Integer 'T1, T2, or T3 as applicable
t_numb = tnumb
End Property
Public Property Let t_numb(ByVal newval As Integer)
t_numb = newval
End Property
Public Property Get t_type() As String 'PF or MW
t_type = ttype
End Property
Public Property Let t_type(ByVal newstr As String)
t_type = newstr
End Property
End Sub
然后我在我的函数中使用
Set t_info = New tdata
t_info.t_acct = wb2.Sheets(1).Cells(d, 1) 'd is just a row counter in a for loop
t_info.t_numb = Right(wb2.Sheets(1).Cells(d, 4), 1)
t_info.t_type = wb2.Sheets(1).Cells(d, 6)
references(CStr(wb2.Sheets(1).Cells(d, 5))).Add t_info
(当然,这不是所有的代码,而只是调用它的部分)
我有 Option Explicit 和所有有趣的东西,一切都编译得很好,但是当它到达函数 sn-p 的第二行时,它试图使 t_info.t_acct 等于某个东西,它会前往Let 那个函数,并一直留在那里……永远。具体来说,它在
Public Property Let t_acct(ByVal newval As Integer)
t_acct = newval
永远。为什么是这样?如何使其设置(错误,让)t_acct 等于我想要的?
【问题讨论】:
-
去掉下划线,你正在循环回来。让你进入代码变量声明的第二和第三行
-
哪个下划线?我删除了 let 程序下的 t_acct、t_numb 和 t_type 中的下划线,它运行成功,但它没有将它设置为等于任何值 - 它仍然是 0(0 不在有问题的单元格中)。我尝试删除其他下划线,但它们返回错误(主要是“不能分配给只读属性,当然删除两个下划线会产生原始问题)