2015-11-03 20 views
1

我有一個十張工作簿。在表1中,我想列出表格名稱(表3至10),表格中的列標題值(僅列8和更多),以及該列中包含數據的單元格的數量。循環瀏覽工作表並嘗試統計列中的數據

我的代碼適用於這三個要求中的兩個。在我的工作表1(名爲:SheetName Columns)上,我得到列A中的圖表名稱和列B中的列標題,但沒有任何運氣獲取該表/列的數據行數。

在我的工作表1上,A列在該工作表第7列之後每列數重複一次,這很好。

Sub ListColumnHeadings() 

Dim cNbrs As Long, i As Integer, tr As Long, tc As Long, wst As Worksheet 
Dim charList(300, 300) As String 

Dim ws As Worksheet, OutputRow As Long 
Dim myRange As Range 
Dim NumRows As Integer 
Dim colNbr As Range 

Set shSkip1 = ThisWorkbook.Sheets("SheetName Record Cnt") 
Set shList = ThisWorkbook.Sheets("SheetName Columns") 

OutputRow = 1 
On Error Resume Next 

For Each ws In Worksheets 
    If ws.Name <> shList.Name And ws.Name <> shSkip1.Name Then 

    cNbrs = ws.Range("A1").CurrentRegion.Columns.Count 

    For i = 8 To cNbrs 
     shList.Cells(OutputRow, "A").Value = ws.Name 
     shList.Cells(OutputRow, "B").Value = ws.Cells(1, i) 

     Set myRange = ws.Columns(i).Select 

     NumRows = ws.Application.WorksheetFunction.CountA(myRange) 
     If NumRows > 0 Then 
     shList.Cells(OutputRow, "C").Value = NumRows 
     End If 

     OutputRow = OutputRow + 1 
    Next i 

    End If 
Next ws 


End Sub 

回答

1

這是因爲你使用的Set myRange...你不需要.Select它的。只要改變該行Set myRange = ws.Columns(i)

如果你想離開.Select,則下一行應該是 NumRows = ws.application.worksheetfunction.counta(selection),但它是強烈推薦avoid using .Select,這只是您的信息。

+1

值得注意的是,如果OP沒有使用「On Error Resume Next」,那麼錯誤將會更加容易看見和調試。 – nwhaught

+0

@nwhaught - 我知道有一個原因,我不使用這些語句(他們可以隱藏一些調試信息),很好的電話! – BruceWayne

+1

真棒,這個小小的調整使它完美的工作。我只是學習這個VBA,看起來像很多功能和屬性來弄清楚它們是如何工作的。再次感謝,我刪除了「在錯誤恢復下一個」聲明... – DavidKn

相關問題