Excel-VBA IF 函数消息"collection is one-based"



我收到了错误消息"collection is one based",但我不知道我的代码出了什么问题。

下表是数据提供程序: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"时,我需要将"Currency"列的值放在那里。

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

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

我试图通过以下功能实现这一点:

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

此函数会给我一条错误消息"collection is one based"。我的代码出了什么问题?

注意:

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

For循环上方,您使用变量k,但由于您只是将其标记为int,而没有设置它,因此它默认为0。Columns.Item()是基于1的(从项目1开始,而不是0),所以您会得到一个错误。在使用前设置k。

相关内容

最新更新