2016-03-05 101 views
0

我有以下的循环VBA对于每个循环不循环我多么希望

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,然后重复此操作。然而,UserBeanList中的For Each userbean似乎将自身重置为开始,而不是获得下一个userbean,它再次获得第一个,我如何修改我的代码以获取下一个userbean在我的节点中?

回答

3

试试这个:

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 

您正在尝试使用a_counter作为一个for循环,并作为一个独立的柜台,你不需要在for循环它得到的方式。


编辑:

你真的不需要一个柜台都没有。你可以用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 
+0

出色地工作!我用你的第二个编辑。非常感谢 – Ingram