2016-09-08 9 views
0

私は複数のワークシート(動的)で作業しており、各シート(VBA初心者)で簡単な計算をしたいと考えています。私は各シートでマクロを行うことができます しかし、ループは機能しません。エラーメッセージは表示されませんが、1つのシートでのみ実行されます。コードは以下のとおりです。どんな助けもありがとうございます。デフォルトRangeによりアクティブワークブック内のワークシートをループすることができません

Sub Counts() 

Dim Last As Integer 
Dim Have As Long 
Dim Miss As Long 
Dim Total As Long 
Dim Value As Currency 
Dim Cost As Currency 
Dim TVal As Currency 
Dim ws As Worksheet 



For Each ws In ActiveWorkbook.Worksheets 

Last = Range("B1").CurrentRegion.Rows.Count 

Miss = Application.WorksheetFunction.CountBlank(Range("A2:A" & Last)) 
Total = Last - 1 
Have = Total - Miss 

Value = Application.WorksheetFunction.SumIf(Range("A2:A" & Last), "X",Range ("G2:G" & Last)) 
TVal = Application.WorksheetFunction.Sum(Range("G2:G" & Last)) 
Cost = TVal - Value 

Range("J2").Value = "Have" 
Range("J3").Value = "Missed" 
Range("J4").Value = "Total Cards" 
Range("J6").Value = "Value" 
Range("J7").Value = "Cost to Complete" 
Range("J8").Value = "Set Value" 

Range("k2").Value = Have 
Range("k3").Value = Miss 
Range("k4").Value = Total 
Range("k6").Value = Value 
Range("k7").Value = Cost 
Range("k8").Value = TVal 

Next ws 

End Sub 

答えて

2

がアクティブシートを参照して、シートをループすると、それらのシートの各々が自動的に起動されるわけではありません。あなたは常にあなたが参照しているシートを正確に指定しようとするべきです。以下のコードは、Rangeを使用した場合はいつでもws.Rangeを使用します。 (ws.Rangeがちょうど.RangeにshortcuttedできるようにWith wsブロックを使用しています。)

Sub Counts() 

Dim Last As Integer 
Dim Have As Long 
Dim Miss As Long 
Dim Total As Long 
Dim Value As Currency 
Dim Cost As Currency 
Dim TVal As Currency 
Dim ws As Worksheet 



For Each ws In ActiveWorkbook.Worksheets 

    With ws 
     'I modified the next line to not use "CurrentRegion" as I wasn't 
     'sure whether "CurrentRegion" would be meaningful without first 
     'selecting a cell. 
     Last = .Range("B" & .Rows.Count).End(xlUp).Row 

     Miss = Application.WorksheetFunction.CountBlank(.Range("A2:A" & Last)) 
     Total = Last - 1 
     Have = Total - Miss 

     Value = Application.WorksheetFunction.SumIf(.Range("A2:A" & Last), "X",.Range("G2:G" & Last)) 
     TVal = Application.WorksheetFunction.Sum(.Range("G2:G" & Last)) 
     Cost = TVal - Value 

     .Range("J2").Value = "Have" 
     .Range("J3").Value = "Missed" 
     .Range("J4").Value = "Total Cards" 
     .Range("J6").Value = "Value" 
     .Range("J7").Value = "Cost to Complete" 
     .Range("J8").Value = "Set Value" 

     .Range("k2").Value = Have 
     .Range("k3").Value = Miss 
     .Range("k4").Value = Total 
     .Range("k6").Value = Value 
     .Range("k7").Value = Cost 
     .Range("k8").Value = TVal 

    End With  
Next ws 

End Sub 
関連する問題