[英]Looping through worksheets and trying to count the data in columns
我有一本十张的工作簿。 在工作表1中,我想列出工作表名称(工作表3至10),工作表中的列标题值(仅第8列及更多列),并为该列列出其中包含数据的单元格数。
我的代码可满足这三个需求中的两个。 在我的工作表1(名为:SheetName Columns)上,我在A列中获得了工作表名称,在B列中获得了列标题,但是运气不佳,无法获得该工作表/列数的数据行。
在我的工作表1上,该工作表的第7列之后的每列数都会重复A列,这很好。
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)
,但是强烈建议您避免使用.Select
,这只是为了您的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.