完全可能 - 甚至可能 - 我在这里遗漏了一些东西,但对于我的生活,我无法弄清楚是什么。
我有一种情况,我需要一个用户定义的结构(或类,我猜,但我试图保持简单)来携带两个相关的数据位:列名和列号,其中某些数据住。
然而,当我运行代码时,我得到一个"对象需要"第一次分配尝试时出错:
这是截断的列表:
Public Type ConfigDataType
ltr As String
nbr As Integer
End Type
Sub MacroWorkbookName()
Dim ProjCol, WBSCol, ResCol, ValCol As ConfigDataType
Call GetParameters(ProjCol, WBSCol, ResCol, ValCol)
End Sub
Sub GetParameters(ByRef P, W, R, V As ConfigDataType)
Dim MacroWorkBook As String
MacroWorkBook = ThisWorkbook.Name
' The next line triggers the error
P.ltr = Workbooks(MacroWorkBook).Sheets("Configuration").Cells(6, 3)
W.ltr = Workbooks(MacroWorkBook).Sheets("Configuration").Cells(7, 3)
R.ltr = Workbooks(MacroWorkBook).Sheets("Configuration").Cells(8, 3)
V.ltr = Workbooks(MacroWorkBook).Sheets("Configuration").Cells(9, 3)
End Sub
我从根本上误解了有关VBA语法的内容,或者我错过了一些脑祸错误。
我也可能在惯用Excel自动化方面解决这个错误,在这种情况下我也欢迎推动真正的道路 - 客户可能会使用这一段时间,并且我讨厌他们因为部署糟糕的代码而认为我不好。
答案 0 :(得分:1)
TigerAvatar马上看到了我的问题。我假设一行像
Dim foo, bar, bash, baz as ConfigType
将导致四个ConfigType类型的变量,但事实并非如此。只有最后一个是;其余的是变体型。正确的用法显然是
Dim foo as ConfigDataType, bar as ConfigDataType, bash as ConfigDataType, bas as ConfigDataType
并且也扩展到sub的定义,这将正确编写
Sub GetParameters(ByRef P as ConfigDataType, W as ConfigDataType, R as ConfigDataType, V As ConfigDataType)
一旦我解决了这两个问题,代码就像我预期的那样工作。再次感谢Tigeravatar提供了如此迅速的答复。