2016-03-05 80 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