反问题VBA

反问题VBA,vba,excel,Vba,Excel,正在与这个计数器斗争 我正在浏览多页信息,试图统计过期任务的数量,然后将这些信息插入统计页面 Sub data_input_overdue() Dim rw As Long Dim Counter As Long Dim col As Long col = CountMyCols("Stats") Worksheets("Stats").Cells(2, col + 1).Value = "Overdue" Counter = 0 For Each sht In ThisWorkbo

正在与这个计数器斗争

我正在浏览多页信息,试图统计过期任务的数量,然后将这些信息插入统计页面

Sub data_input_overdue()

Dim rw As Long
Dim Counter As Long

Dim col As Long
col = CountMyCols("Stats")

Worksheets("Stats").Cells(2, col + 1).Value = "Overdue"

Counter = 0


For Each sht In ThisWorkbook.Sheets

    For i = 2 To CountMyRows(sht.Name)
        c_date = Range("E" & i)
        dueDate = CDate(c_date)
        If dueDate < Date And sht.Range("I" & i).Value = "No" Then
        Counter = Counter + CLng(1)
        Worksheets("Stats").Cells(i, col + 1).Value = Counter
    End If
    Next i
Next sht
End Sub

Public Function CountMyRows(SName As String) As Long
On Error Resume Next
With ThisWorkbook.Worksheets(SName)
    CountMyRows = .Cells.Find(What:="*", _
                              After:=.Range("A1"), _
                              Lookat:=xlPart, _
                              LookIn:=xlFormulas, _
                              SearchOrder:=xlByRows, _
                              SearchDirection:=xlPrevious, _
                              MatchCase:=False).Column
子数据\u输入\u过期()
变暗rw为长
昏暗的柜台一样长
暗色如长
col=CountMyCols(“Stats”)
工作表(“统计数据”)。单元格(2,列+1)。Value=“过期”
计数器=0
对于此工作簿中的每个sht。工作表
对于i=2,对myrows(sht.Name)进行计数
c_日期=范围(“E”和i)
dueDate=CDate(c_日期)
如果dueDate
它没有计算,也没有进入正确的位置。我想让它进入一列,从第三行开始。
在多张工作表中,既有已完成的任务,也有未完成的任务

我想这就是你想要做的,但我不确定你将如何用适用的工作表来识别每个总数

Sub data_input_overdue()
    Dim c_date
    Dim dueDate As Date
    Dim i As Long
    Dim Counter As Long
    Dim cntSheet As Long

    Dim col As Long
    col = CountMyCols("Stats")

    Worksheets("Stats").Cells(2, col + 1).Value = "Overdue"

    cntSheet = 0

    For Each sht In ThisWorkbook.Worksheets
        If sht.Name <> "Stats" Then ' Don't process the Stats sheet
            cntSheet = cntSheet + 1
            'Reset counter at the start of each sheet
            Counter = 0
            For i = 2 To CountMyRows(sht.Name)
                c_date = sht.Range("E" & i)
                dueDate = CDate(c_date)
                If dueDate < Date And sht.Range("I" & i).Value = "No" Then
                    Counter = Counter + 1
                End If
            Next i
            'Update Stats sheet after finished counting
            Worksheets("Stats").Cells(2 + cntSheet, col + 1).Value = Counter
        End If
    Next sht

End Sub

Public Function CountMyRows(SName As String) As Long
    On Error Resume Next
    With ThisWorkbook.Worksheets(SName)
        CountMyRows = .Cells.Find(What:="*", _
                                  After:=.Range("A1"), _
                                  Lookat:=xlPart, _
                                  LookIn:=xlFormulas, _
                                  SearchOrder:=xlByRows, _
                                  SearchDirection:=xlPrevious, _
                                  MatchCase:=False).Row
    End With
End Sub

Public Function CountMyCols(SName As String) As Long
    On Error Resume Next
    With ThisWorkbook.Worksheets(SName)
        CountMyCols = .Cells.Find(What:="*", _
                                  After:=.Range("A1"), _
                                  Lookat:=xlPart, _
                                  LookIn:=xlFormulas, _
                                  SearchOrder:=xlByColumns, _
                                  SearchDirection:=xlPrevious, _
                                  MatchCase:=False).Column
    End With
End Sub
子数据\u输入\u过期()
Dim c_日期
将日期设置为日期
我想我会坚持多久
昏暗的柜台一样长
把床单弄得一样长
暗色如长
col=CountMyCols(“Stats”)
工作表(“统计数据”)。单元格(2,列+1)。Value=“过期”
cntSheet=0
用于此工作簿中的每个sht。工作表
如果sht.Name为“Stats”,则“不处理统计表”
cntSheet=cntSheet+1
'在每张纸的开头重置计数器
计数器=0
对于i=2,对myrows(sht.Name)进行计数
c_日期=短范围(“E”和i)
dueDate=CDate(c_日期)
如果dueDate


如果我这样做,我可能会将工作表名称放在A列,总计放在B列,或者从A列的工作表名称开始,然后使用该工作表名称来决定在计算要放在该行的总计时要处理的工作表(而不仅仅是按制表符顺序循环所有工作表).

我们所看到的
CountMyRows
函数似乎实际上是对列进行计数。调用
.Cells.Find
的结果应用了
.Column
,这似乎是计数器-intuitive@barrowc对不起,我不清楚。在多个工作表中有已完成和未完成的任务,因此很遗憾,我不能只计算行数。@ZoeChu barrowc说的是,在
CountMyRows
函数中,您返回最后一行中最后使用的单元格的
.Column
。您需要返回
.Row
。(而且,即使我的咖啡在我的血液中流动,我仍然没有弄清楚你想写什么——最好是在你的问题中加入一些样本输入和一些样本预期输出。)@YowE3K是的,很抱歉刚刚发现了这一点!Thanks@barrowc很抱歉。谢谢你指出这一点