2017-01-02 5 views
0

日付が今日の場合、いくつかの行を合計するためのこのコードがあります。それは正常に動作しますが、私はいくつかのワークシートを持っています。例えば、シート1,2,3,4,5です。シート1にデータを入力してからこのコードを実行するとうまくいきますが、 sheet2に移動し、3に行くと、sheet2にあるものがゼロになります。私は日付が今日よりも小さい場合、Subを終了するために底の近くの行をコメントアウトしますが、コードが死ぬことをします。このシートを現在使用されているシートのみで走行させるにはどうすればよいですか?私は他のすべてのシートを無視したい。Excel VBA合計行by

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