Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel vba if函数消息;收集是基于“一”的;_Vba_Excel_If Statement - Fatal编程技术网

excel vba if函数消息;收集是基于“一”的;

excel vba if函数消息;收集是基于“一”的;,vba,excel,if-statement,Vba,Excel,If Statement,我收到错误消息“collection is one based”,但我无法找出我的代码出了什么问题 下表是数据提供程序:dp2=ActiveDocument.DataProviders(“Test2”) 现在我需要根据这些数据自动发送电子邮件。我需要Excel VBA中的一个函数,它在每一行中查找“Switchmon”列的值 当值为“N”时,我需要在电子邮件中输入字符“p”。 当值为“Y”时,我需要将列“Currency”的值放在那里 我的电子邮件中的结果应如下所示: 1) 150 EUR 2

我收到错误消息“collection is one based”,但我无法找出我的代码出了什么问题

下表是数据提供程序:
dp2=ActiveDocument.DataProviders(“Test2”)

现在我需要根据这些数据自动发送电子邮件。我需要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中添加一列,但不幸的是,在这种特殊情况下,这不是一个解决方案。

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

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

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