2016-07-10 7 views
1

私はVBAに比較的新しいです。そして、私がワークシートで作業しているときに、列の行の条件に基づいて行を自動的に非表示/非表示するコードを作成しました(0表示/非表示)。この比較的簡単なマクロは、別のシートを追加するまでうまくいきました。このシートにはマクロがないので、関連しているとは思わない。しかし今は毎回END IF関数でランタイムエラーが発生し、解決方法はわかりません。おそらく単純な解決策がありますが、私はそれを見つけることができません。ここでVBA - END IFでのランタイムエラー

はコードです:あなたは、より完全なデバッグ情報が必要な場合は

Private Sub Worksheet_Calculate() 
    Application.ScreenUpdating = False 
    Dim LastRow As Long, c As Range 
    Application.EnableEvents = False 
    LastRow = Cells(Cells.Rows.Count, "BA").End(xlUp).Row 
     On Error Resume Next 
     For Each c In Range("BA34:BA56,BA73:BA74,BA76:BA107") 
     If c.Value = 1 Then 
      c.EntireRow.Hidden = True 
     ElseIf c.Value = 0 Then 
      c.EntireRow.Hidden = False 
    End If 
    Next 
    On Error GoTo 0 
    Application.EnableEvents = True 
    Application.ScreenUpdating = True 
    End Sub 
+0

ないあなたのエラーの原因が、あなたは網羅できている全体 '... ELSE ...エンドIf'は' c.EntireRow.Hidden = CBool​​(c.Value)として ' – Jeeped

+1

は、そのエラーがない場合*ランタイムエラー以上の*何か*と言いますか? – usr2564301

+0

'On Error Resume Next'を削除またはコメントアウトし、親ワークシート参照を範囲オブジェクトに適用します。ワークシートには、他のワークシートの変更による計算イベントのトリガーとなる揮発性の式が含まれている場合があります。 – Jeeped

答えて

1

On Error Resume Nextを削除するか、コメントアウトします。 Worksheet_Calculateと同じくらい頻繁に実行されるイベントマクロでは必要ありません。

範囲オブジェクトに親ワークシート参照を適用します。ワークシートには、他のワークシートの変更による計算イベントのトリガーとなる揮発性の式が含まれている場合があります。

親ワークシートがActiveSheet propertyを保持している場合にのみコードが実行されるように、広い条件を追加しました。ワークシートには、他のワークシート(または別のワークブック)の変更によって計算イベントがトリガされるvolatile式があります。

LastRow私はそれを削除したので、割り当て後(何か問題はありません)何もしません。

私はRange.Hiddenプロパティを1行に簡略化しました。

Private Sub Worksheet_Calculate() 
    If Me.Name = Activesheet.Name Then 
     Application.ScreenUpdating = False 
     Application.EnableEvents = False 
     Dim c As Range 
     For Each c In Me.Range("BA34:BA56,BA73:BA74,BA76:BA107") 
      c.EntireRow.Hidden = CBool(c.Value2) 
     Next c 
     Application.EnableEvents = True 
     Application.ScreenUpdating = True 
    End If 
End Sub 

揮発性関数は、ブック全体の変更でいつでも何かを再計算¹ときだけでなく、その成果の変化に影響を与え何か。 volatileの機能の例は、INDIRECT,OFFSET,TODAY,NOW,RANDおよびRANDBETWEENである。 CELLINFOワークシート関数のいくつかのサブ関数は、それらも同様に揮発性にします。

+0

お返事ありがとうございます。実際、最初のエラーは実行時エラーでしかなく、マクロが動作するまでに時間がかかりました。シートは単に "Sheet1"です。あなたの提案に置き換えると、ランタイムエラー "1004"と表示されます。あなたのご協力と迅速な対応をありがとうございます。 – AlmarM

+0

スレッドを終了するだけです。私はあなたが書いたコードと私のコードの組み合わせに基づいて解決しました。0は再表示するトリガーでなければならないからです。私はエラーラインが問題を引き起こしたと思います。 – AlmarM

+0

'CBool​​(0)'が 'False'に解決されるので、私は実際にこの問題を理解していません。ほぼすべてのプログラミング言語において、「False」はゼロに、ブール項では偽でないものはすべて真です。例えば#define False 0:#define TrueはFalseではない。 – Jeeped

0

スレッドを終了するだけです。私はあなたが書いたコードと私のコードの組み合わせに基づいて解決しました。0は再表示するトリガーでなければならないからです。私はエラーラインが問題を引き起こしたと思います。

Private Sub Worksheet_Calculate() 
    Application.ScreenUpdating = False 
    Dim LastRow As Long, c As Range 
    Application.EnableEvents = False 
    LastRow = Cells(Cells.Rows.Count, "BA").End(xlUp).Row 
    On Error Resume Next 
    For Each c In Range("BA34:BA56,BA73:BA74,BA76:BA107") 
     If c.Value = 1 Then 
      c.EntireRow.Hidden = True 
     ElseIf c.Value = 0 Then 
      c.EntireRow.Hidden = False 
     End If 
    Next 
    Application.EnableEvents = True 
    Application.ScreenUpdating = True 
    End Sub 
おそらく
関連する問題