阻止“Object Required”问题

这是完全可能的 – 甚至可能 – 我在这里错过了一些东西,但是对于我来说,我无法弄清楚什么。

我有一种情况,我需要一个用户定义的结构(或者一个类,我想,但是我试图保持简单),以携带两个相关的数据位:列名和列号,其中某些数据存在。

但是,当我运行代码时,第一次分配尝试时出现“需要对象”错误:

这是截断的清单:

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语法,或者我错过了一些braindead错误。

我也可能在Excel自动化方面遇到这种错误,在这种情况下,我也欢迎向True Path推荐 – 客户端可能会使用一段时间,而我会恨他们认为生病我部署蹩脚的代码。

TigerAvatar立即看到我的问题。 我正在假设一条线

 Dim foo, bar, bash, baz as ConfigType 

会导致ConfigTypetypes的四个variables,但事实并非如此。 只有最后一个是; 其余的是变型。 正确的用法显然是

 Dim foo as ConfigDataType, bar as ConfigDataType, bash as ConfigDataType, bas as ConfigDataType 

并延伸到子的定义,也就是正确的写

 Sub GetParameters(ByRef P as ConfigDataType, W as ConfigDataType, R as ConfigDataType, V As ConfigDataType) 

一旦我解决了这两个问题,代码正常工作。 再次感谢Tigeravatar提供了这样一个快速的答案。