2014-01-21 78 views
3

我在工作表中有一個表,我想迭代並更改使用我設置的函數的值。該函數只是調用多個Replace函數來更改字符串。使用VBA遍歷表中的所有行和列

我的問題是如何迭代表中的值?

我可以使用下面的代碼列做到這一點:

For Each cell In Sheets("RawData").ListObjects("RawTable").ListColumns("REQUESTNAME").DataBodyRange.Cells 
    cell.Value = decodeEnt(cell.Value) 
Next 

但是我怎麼修改代碼,使其通過迭代行也?我嘗試使用ListRows和ListColumns的組合,但不知道在哪裏去做事後處理。這裏是我之前我不確定的地方:

Dim listObj As ListObject 
Set listObj = Sheets("RawData").ListObjects("RawTable") 

For Each tableRow In listObj.ListRows 
    For Each tableCol In listObj.ListColumns 
     ' Would using intersect work here? 
     ' listObj.Cell.Value = decodeEnt(cell.Value) 
Next 

任何幫助表示讚賞。

回答

2

我認爲你不能使用這樣的變體迭代,你必須使用索引迭代。像這樣(未經):

Dim listObj As ListObject, r%, c% 
Set listObj = Sheets("RawData").ListObjects("RawTable") 

For c = 1 To listObj.ListColumns.Count 
    For r = 1 To listObj.ListRows.Count 
     listObj.DataBodyRange.Cells(r, c).Value = decodeEnt(listObj.DataBodyRange.Cells(r, c).Value) 
    Next 
Next 
+1

什麼是主題標籤#是什麼意思? 編輯:嗯,我現在看到,這是一個簡短的方式來定尺寸它作爲一個雙。 – Mo2

+1

您的解決方案有效。我在你的文章中修復了一些語法錯誤,但其他一切都很好。謝謝! – Mo2

+2

+1。我總是忘記'.DataBodyRange'(如果我已經測試過代碼,但是我只是從內存中開始,那麼會發生這種情況)。) –

3
Dim Cell as Range 

For Each Cell in listObj.DataBodyRange 
... 
+0

也可以。比以前的答案還要短。謝謝 – Mo2