2016-04-05 6 views
0

良い日、現在も私の上司の仕事の問題に直面していて、MSのExcelマクロを作成しています。MS Excelのマクロ自動カウント機能、ウィンドウのポップアップ表示結果

問題の対面はまだ同じです:メッセージボックスに

  • 自動カウント時代遅れのデータとショーユーザー開いたワークシート。

私は既にいくつかの解決策を尋ねられていますが、その提案コードを元のコードと組み合わせましたが、その結果も同じです。従業員の契約が古くてもメッセージは0と表示されます。

以下は、あなたの提案と私のオリジナルコードの組み合わせです。ご覧ください。

以下はあなたの提案と私の元のコード作成の組み合わせです。一見して、何が間違っているのかを教えてください。私は、例えば

With...End Withを使用する場合

Sub Worksheet_Activate() 

Dim startCell As Integer, endCell As Integer 
Dim column As Integer 
Dim CountCells As Integer 
Dim x As Integer 

With Worksheets("Sheet1") 

lastrow = Range("L1048576").End(xlUp).Row 



For i = 4 To lastrow 

    If Range("L" & i).Value <> "" And Now <> "" Then 

     If Range("L" & i).Value <= Now Then 

      Range("L" & i).Font.ColorIndex = 3 

     End If 
    End If 
Next i 

    column = 12 'Column L 

    startCell = 4 
    endCell = xlUp 

    CountCells = 0 



    For x = startCell To endCell Step 1 

    If Cells(x, column).Interior.ColorIndex = 3 Then 

     CountCells = CountCells + 1 


    End If 
Next x 

    MsgBox CountCells & " expiring" 

End With 
End Sub 

答えて

0

endCellを作成する代わりに同じlastrowを使用しないと、コードが同じ範囲の値で確実に実行されます。

あなたも、私はそれだけでxlUpが働くだろうとは思わない

endCell = Range("L1048576").End(xlUp).Row 

endCellを変更することができます。

編集:

Sub Worksheet_Activate() 

Dim startCell As Integer, endCell As Integer 
Dim column As Integer 
Dim CountCells As Integer 
Dim x As Integer 
Dim lastrow As Integer 
Dim i As Integer 



With Worksheets("Sheet1") 

lastrow = Range("L1048576").End(xlUp).Row 



For i = 4 To lastrow 

    If Range("L" & i).Value <> "" And Now <> "" Then 

     If Range("L" & i).Value <= Now Then 

      Range("L" & i).Interior.ColorIndex = 3 

     End If 
    End If 
Next i 

column = 12 'Column L 

startCell = 4 

CountCells = 0 


For x = startCell To lastrow Step 1 

    If Cells(x, column).Interior.ColorIndex = 3 Then 

     CountCells = CountCells + 1 

    End If 

Next x 

MsgBox CountCells & " expiring" 

End With 
End Sub 
+0

申し訳ありませんが、動作していません、私は1つのlastrowを使用するか、同じRange( "L1048576")のlastrowとendcellの両方を使用するように変更しました。あなたがここで完全なコードを書き留めるのは可能です。 – Han

+0

私は自分の答えにコードを追加しました。他の何かに気づいたのは、最初は 'font.colorindex'を変更していますが、後で' interior.colorindex'を探しています。私はそれを変更して「インテリア」を変更しました – ballsy26

+0

ええ!私もそれに気付きました、それは私の以前のコード作成が実行されていない理由です...とにかくthx! – Han

0

は、句とに属しているすべてのオブジェクトが.(ピリオド)を先頭に追加する必要があります。..できるだけ早くそれを必要とします

With Worksheets("Sheet1") 
    lastrow = Range("L1048576").End(xlUp).Row 

は修正を作成し、それが助けかどうかを確認

With Worksheets("Sheet1") 
    lastrow = .Range("L1048576").End(xlUp).Row 

でなければなりません。それでも動作しない場合は、現在のコードで質問を更新してください。

+0

@Tim_Williamsごめん男、それが原因コメントボックスに、働いていない私はここで完全coddingをコピー&ペーストカント、リミットスペースを持っていました。 – Han

0

問題が解決されていた、以下の正しい/使用可能coddingです。 Thxの皆さん、私はコード作成のテストと修正を続けています。

Sub Worksheet_Activate() 

Dim startCell As Integer, endCell As Integer 
Dim column As Integer 
Dim CountCells As Integer 
Dim x As Integer 

With Worksheets("Sheet1") 

lastrow = Range("L1048576").End(xlUp).Row 

CountCells = 0 

For i = 4 To lastrow 

    If Range("L" & i).Value <> "" And Now <> "" Then 

     If Range("L" & i).Value <= Now Then 

      Range("L" & i).Font.ColorIndex = 3 

       If Range("L" & i).Font.ColorIndex = 3 Then 

        CountCells = CountCells + 1 

      End If 
     End If 
    End If 
Next i 

    MsgBox CountCells & " expiring" 

End With 
End Sub 
関連する問題