如果函数消息“收集是一个基于”excel-vba

我收到了错误消息“集合是基于一个”,但我无法弄清楚我的代码有什么问题。

下表是dataprovider: dp2 = ActiveDocument.DataProviders("Test2")

  Quantity Switchmon Currency ------------------------------------- 1) 150 Y EUR 2) 250,006 N USD 3) 132,4 Y EUR 4) 24 Y GBP 5) 1 N USD 

现在我需要发送一个基于这些数据的自动电子邮件。 我需要在Excel-VBA中的每一行查找“Switchmon”列的值的函数。

当这个值是“N”时,我需要把字符“P”放在邮件里。 当值是“Y”时,我需要把“货币”列的值放在那里。

我的电子邮件的结果应该是这样的:

 1) 150 EUR 2) 250,006 P 3) 132,4 EUR 4) 24 GBP 5) 1 P 

我试图用以下function来实现这个function:

 Dim strbody As String Dim dp1 As DataProvider Dim dp2 As DataProvider Set dp2 = ActiveDocument.DataProviders("Test2") Dim k As Integer Dim numcurr As String If dp2.Columns("Switchmon").Item(k) = "N" Then numcurr = "P" Else numcurr = dp2.Columns("Currency").Item(k) End If For k = 1 To dp2.Columns(1).Count strbody = dp2.Columns("Quantity").Item(k) & "numcurr" Debug.Print strbody Next k 

此function给我一个错误消息“收集是一个基础”。 我的代码有什么问题?

注意:

我知道我可以用一个if()公式在Excel中添加一个列,但不幸的是,在这种情况下这不是一个解决scheme。

For循环上面使用variablesk但是因为你只是将它作为一个int进行decalared,并没有设置它,所以它默认为0. Columns.Item()是基于1的(从项目1开始,而不是0),所以你得到错误。 在使用之前设置k。