循环浏览工作表并尝试对列中的数据进行计数

我有一个十张工作簿。 在表1中,我想列出表格名称(表3至10),表格中的列标题值(仅列8和更多),以及该列中包含数据的单元格的数量。

我的代码适用于这三个要求中的两个。 在我的工作表1(名为:SheetName列)我得到列A中的图表名称和列B中的列标题,但没有任何运气得到该表/列的数据行数。

在我的工作表1上,列A在列表7的第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 

这是因为你使用Set myRange...你不需要select它。 只需将该行更改为Set myRange = ws.Columns(i)

如果你想离开。select,那么下一行应该是NumRows = ws.application.worksheetfunction.counta(selection) ,但强烈build议你避免使用。select ,这只是为了您的信息。