2016-06-15 14 views
0

マクロを作成しようとしましたが、起動時にそれを処理してクラッシュしません。ここでVBAマクロがクラッシュする

はマクロです:

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim i As Integer 
Dim sous As Integer 
If Not IsEmpty(Cells(4, 2)) And IsNumeric(Cells(4, 2).Value) And Not IsEmpty(Cells(4, 3)) And IsNumeric(Cells(4, 3).Value) Then 
    For i = Cells(4, 3).Value To Cells(4, 2).Value 
     sous = i - Cells(4, 3).Value 
     Cells(5 + sous, 4).Value = i 
    Next i 
MsgBox "Yataaaah" 
End If 
End Sub 

私はコメントの上に置いた場合、それが動作するので問題はラインCells(5 + sous, 4).Value = iです。

誰もがExcelがそれを処理しない理由を知っていますか?

ありがとうございました。 Ps:私はMacでExcelを使用しています。15.19.1

+2

エラーは何ですか? 'sous'と' i'がVBA整数(32767)の限界を決して超えないことを確認しましたか?あなたが作業しているデータの例やエラーが表示されなくても、意味のあるヘルプを提供することは非常に困難です。 – Dave

+0

セル50と40の両方に入力して、私は魔女の車を1つは最大と魔女1つ分、彼らは限界から外れることはできません。 エラー:「問題が発生したためにExcelが閉じられました。不便です。Excelは保存されていない作業を取り戻そうとしますが、失われる可能性があります。 (そのようなもの)エラー番号やそれに類するものはありません。 – Victor

+0

を提供してください[mcve] – Mafii

答えて

3

イベントをオフにする必要があります。 Excelがクラッシュする理由は、選択変更イベントが選択変更イベントを発生させる値を変更することです。それは無限ループで立ち往生します。

Private Sub Worksheet_Change(ByVal Target As Range) 
    Application.EnableEvents = False 
    Dim i As Integer 
    Dim sous As Integer 
    If Not IsEmpty(Cells(4, 2)) And IsNumeric(Cells(4, 2).Value) And Not IsEmpty(Cells(4, 3)) And IsNumeric(Cells(4, 3).Value) Then 
     For i = Cells(4, 3).Value To Cells(4, 2).Value 
      sous = i - Cells(4, 3).Value 
      Cells(5 + sous, 4).Value = i 
     Next i 
     MsgBox "Yataaaah" 
    End If 

    Application.EnableEvents = True 
End Sub 
+0

それは動作します、どうもありがとうございます。 – Victor

+0

セル(4,3)、セル(4,2)または列(4)(行5+)に変更があったかどうかを確認することもよいでしょう。 – arcadeprecinct