VBA为每个循环不循环我想要的方式

VBA为每个循环不循环我想要的方式,vba,foreach,nodevalue,Vba,Foreach,Nodevalue,我有以下循环 r = 4 c = 4 Set userBeanList = XMLDOC.SelectNodes("/response/responseBody/responseList/item[recordType='TPI']/*[not(self::catch or self::reprive or self::cate or self::reet or self::aarg or self::crane)]") For a_counter = 1 To 7 For Each user

我有以下循环

r = 4
c = 4

Set userBeanList = XMLDOC.SelectNodes("/response/responseBody/responseList/item[recordType='TPI']/*[not(self::catch or self::reprive or self::cate or self::reet or self::aarg or self::crane)]")
For a_counter = 1 To 7
For Each userbean In userBeanList

Sheets("Sheet2").Cells(r, c) = userbean.nodeName

Sheets("Sheet2").Cells(r + 1, c) = userbean.Text
 r = r + 2
a_counter = a_counter + 1
If (a_counter = 7) Then Exit For

Next userbean
c = c + 1
r = 4
a_counter = 1
Next a_counter
它基本上覆盖了我的节点,在第4行打印节点名称,然后在第5行下面的单元格中打印节点值,重复6次,这样我就可以在电子表格的列表中得到节点名称,然后是节点值。然后我有一个计数器,当它达到7时,退出for循环,将列增加1,将行重置回4,并重复此操作。但是,userbean列表中的For Each userbean似乎会将其自身重置回起始位置,因此,与其获得下一个userbean,不如再次获得第一个userbean,我如何修改下面的代码以获得节点中的下一个userbean?

尝试以下操作:

r = 4
c = 4
a_counter = 1

Set userBeanList = XMLDOC.SelectNodes("/response/responseBody/responseList/item[recordType='TPI']/*[not(self::catch or self::reprive or self::cate or self::reet or self::aarg or self::crane)]")

For Each userbean In userBeanList
    Sheets("Sheet2").Cells(r, c) = userbean.nodeName
    Sheets("Sheet2").Cells(r + 1, c) = userbean.Text
    r = r + 2
    a_counter = a_counter + 1
    If a_counter  >= 7 Then
        c = c + 1
        r = 4
        a_counter = 1
    End If

Next userbean
您正试图使用_计数器作为for循环,并且作为单独的计数器,您不需要for循环的阻碍


编辑:

你真的根本不需要a-计数器。您可以使用r值在完成6时进行检查:

r = 4
c = 4

Set userBeanList = XMLDOC.SelectNodes("/response/responseBody/responseList/item[recordType='TPI']/*[not(self::catch or self::reprive or self::cate or self::reet or self::aarg or self::crane)]")

For Each userbean In userBeanList
    Sheets("Sheet2").Cells(r, c) = userbean.nodeName
    Sheets("Sheet2").Cells(r + 1, c) = userbean.Text
    r = r + 2
    If r  > 14 Then
        c = c + 1
        r = 4
    End If

Next userbean
试试这个:

r = 4
c = 4
a_counter = 1

Set userBeanList = XMLDOC.SelectNodes("/response/responseBody/responseList/item[recordType='TPI']/*[not(self::catch or self::reprive or self::cate or self::reet or self::aarg or self::crane)]")

For Each userbean In userBeanList
    Sheets("Sheet2").Cells(r, c) = userbean.nodeName
    Sheets("Sheet2").Cells(r + 1, c) = userbean.Text
    r = r + 2
    a_counter = a_counter + 1
    If a_counter  >= 7 Then
        c = c + 1
        r = 4
        a_counter = 1
    End If

Next userbean
您正试图使用_计数器作为for循环,并且作为单独的计数器,您不需要for循环的阻碍


编辑:

你真的根本不需要a-计数器。您可以使用r值在完成6时进行检查:

r = 4
c = 4

Set userBeanList = XMLDOC.SelectNodes("/response/responseBody/responseList/item[recordType='TPI']/*[not(self::catch or self::reprive or self::cate or self::reet or self::aarg or self::crane)]")

For Each userbean In userBeanList
    Sheets("Sheet2").Cells(r, c) = userbean.nodeName
    Sheets("Sheet2").Cells(r + 1, c) = userbean.Text
    r = r + 2
    If r  > 14 Then
        c = c + 1
        r = 4
    End If

Next userbean

工作出色!我用了你的第二次编辑。多谢了!我用了你的第二次编辑。非常感谢