2017-01-02 163 views
0

如果日期是今天,我有这个代码用于总结几行。它工作正常,但我有几个工作表,例如...表1,2,3,4,5。如果我在工作表1中输入数据,然后运行此代码它工作正常,但如果我在工作表1中输入数据,然后跳过sheet2并转到3,它将零表中的内容放在sheet2中。如果日期小于今天,我会在底部附近注释掉退出子,但这样做代码会死掉。我怎样才能使这个运行只有当前使用的工作表?我想忽略所有其他工作表。Excel VBA总结按行数

Sub Sum_TodaysDate() 

On Error Resume Next 

Dim sh As Worksheet 

For Each sh In ActiveWorkbook.Worksheets 

Dim LastRow As Long, iCount As Long 
Dim icell As Range 
Dim dSplit As Variant 
Dim dIndex As Date 

LastRow = sh.Range("D" & Rows.Count).End(xlUp).Row 
iCount = 0 

For Each icell In sh.Range("D2:D" & LastRow) 
    dSplit = Split(icell.Value, " ") 
    dIndex = Format(dSplit(0), "mm/dd/yyyy") 
    If dIndex = Date Then 
     iCount = iCount + 1 
     icell.Offset(0, 1).Value = "|" 
    End If 
Next icell 

'If sh.Range("E" & LastRow).Value < Date Then Exit Sub 
sh.Range("E" & LastRow).Value = iCount 
sh.Range("E" & LastRow).Font.Color = vbRed 


Next sh 

Application.ScreenUpdating = False 

End Sub 
+0

你知道代码是如何工作的呢?如果它适用于所有工作表,那么删除循环应该非常简单 – psubsee2003

回答

1

替换:

For Each sh In ActiveWorkbook.Worksheets 

有:

Set sh = ActiveSheet 

然后取出:

Next sh 
+0

谢谢!我不知道我在这里出了什么问题,我认为不是SET SH,我只是彻底删除它以摆脱for循环。 – Noob2Java