2015-06-14 63 views
-1

循環行有沒有人有通過排在過濾表中循環的好方法?在過濾表

我傾向於需要使用一些數據從一個過濾表填充到另一個文件,在這種情況下,賬戶工作表的聲明。由於行是不連續的,我以前使用行號填充數據的方法似乎失敗了。

SOAwb是與來自TSOA表的數據來填充一個單獨的工作簿時,大多數代碼實際工作而是從過濾/隱藏範圍數據仍包含。

j是上SOAwb第一個空行,所以在該端部爲環,當j = J + 1個的下一個空行重複填充過程

For k = 1 To TSOA.DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible).Count 

SOAwb.Worksheets(1).Cells(j, 4) = TSOA.DataBodyRange(k, 6) 'debit amount 

SOAwb.Worksheets(1).Cells(j, 5) = TSOA.DataBodyRange(k, 7) 'credit amt 

SOAwb.Worksheets(1).Cells(j, 1) = TSOA.DataBodyRange(k, 3) 'Date 

SOAwb.Worksheets(1).Cells(j, 2) = Right(TSOA.DataBodyRange(k, 3), 2) & "-" & TSOA.DataBodyRange(k, 2) 'Reference Number 

Select Case TSOA.DataBodyRange(k, 1) 

Case "INV" 

    SOAwb.Worksheets(1).Cells(j, 3) = "Invoice" 

Case "CR" 

    SOAwb.Worksheets(1).Cells(j, 3) = "Credit" 

Case Else 

    MsgBox "Invalid Type" 

End Select 

j = j + 1 

Next 

這將是完美的,如果K是仍然表格中的相對行號#位置。有沒有人有關於如何做到這一點的建議,或者使用過濾範圍將數據(逐行)填充到另一個工作簿的替代方法?

+1

通過循環使用'for'循環,[觀察]表(https://msdn.microsoft.com/en- us/library/office/ff196157.aspx)'.specialcells(xlcelltypevisible)'只使用過濾結果。相應地修改你的代碼。 – Tom

+0

這幾乎是我的代碼正在做的,我正在努力'相應地修改你的代碼'位。謝謝 – lackdaz

回答

-1

隱藏行有身高= 0

你必須遍歷所有使用行過程只可見那些

For k = 1 To TSOA.DataBodyRange.Rows.Count 

If SOAwb.Worksheets(1).Cells(j, 4).Height > 0 Then... 

與此類似:

For k = 1 To TSOA.DataBodyRange.Rows.Count 

    With SOAwb.Worksheets(1) 

     If TSOA.DataBodyRange(k, 6).Height > 0 Then 

      .Cells(j, 4) = TSOA.DataBodyRange(k, 6) 'debit amount 
      .Cells(j, 5) = TSOA.DataBodyRange(k, 7) 'credit amt 
      .Cells(j, 1) = TSOA.DataBodyRange(k, 3) 'Date 
      .Cells(j, 2) = Right(TSOA.DataBodyRange(k, 3), 2) & "-" & _ 
           TSOA.DataBodyRange(k, 2) 'Reference Number 
      Select Case TSOA.DataBodyRange(k, 1) 
       Case "INV": .Cells(j, 3) = "Invoice" 
       Case "CR": .Cells(j, 3) = "Credit" 
       Case Else: MsgBox "Invalid Type" 
      End Select 
     End If 
    End With 
    j = j + 1 
Next 
+0

這是一個很好的技巧!非常感謝! – lackdaz

+0

頂抽屜真的,這真的是爲什麼這麼這麼多贏得 – lackdaz

+0

我很高興它幫助! –

0

使用範圍收集您已經直接指定,而不是它的數量

Dim rCell as Range 
For each rCell in TSOA.DataBodyRange.Columns(1).SpecialCells(xlCellTypeVisible) 
    ' Access the cells as 
    t.DataBodyRange.Cells(c.Row - t.HeaderRowRange.Row, ColumnNum) 
Next 
+0

皮膚龍蝦的兩種方法,下次我遇到For循環時,我會注意到這一點。它只是有點難以繞開前綴。 – lackdaz