2017-06-13 16 views
2
Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim b As Integer 
    b = 0 

    Dim cell As Range 
    Dim rgn As Range 

    Set rgn = Range("f2:f200") 

    For Each cell In rgn 
     If IsEmpty(cell) = False Then 
      b = b + 1 
     End If 
    Next 

    Range("d2").Value = b 
End Sub 

こんにちは、次のExcel VBAコードを実行しようとしたときに問題が発生しました。メッセージボックスが飛び出すと「「スタック領域不足」Excel VBA "out of stack space"エラー

問題は、Set rgn = range("f2:f200")行目に、別のメッセージボックスが飛び出しますと言う

があると言うだろうメソッド 'value'オブジェクト 'range'の失敗 "

私は何が間違っているかわかりません...どうもありがとうございました。

答えて

4

問題はあなたが一時的にイベントを無効にする必要が再び...

再度イベントをトリガする、Changeイベント内のセルを変更し、再度されていることである、と:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim b As Integer 
    b = 0 

    Dim cell As Range 
    Dim rgn As Range 

    Set rgn = Range("f2:f200") 

    For Each cell In rgn 
     If IsEmpty(cell) = False Then 
      b = b + 1 
     End If 
    Next 
    Application.Enableevents = False 
    Range("d2").Value = b 
    Application.Enableevents = True 
End Sub 
+0

としてaサイドノート:Integerを使わず、常にLongを使うことをお勧めします。範囲 'rgn'が変わると、簡単にオーバーフローに陥ります。 [here](https://stackoverflow.com/a/26409520/3219613)を読んで、なぜ「Integer」の代わりに「Long」を使うのが良いのか。 –

+0

ありがとうございました!それは私の問題を完全に解決し、説明と精緻化にも感謝しています!彼らは本当に便利です! –

関連する問題