Excel 2010では、Worksheet_Changeイベントから 'Target'をサブルーチンに渡そうとしています。サブは、特定の範囲内で変更が発生したかどうかをチェックし、変更がある場合はそれを行います。私が抱えている問題は、ターゲットが呼び出し側のプロシージャのそれとは異なる振る舞いをしているようです。例えば、呼び出しプロシージャでは、交差点内でTargetを使用することができます。サブオブジェクトに渡して同じことをすると、実行時エラー(1004)が発生します。私のコードは以下の通りです。誰かが私に間違っていることを知らせることができれば、感謝しています。 「シート上のコード - これは、複数のシート上にあるExcelでVBAをターゲットに渡す
Private Sub Worksheet_Change(ByVal Target As Range)
SubRout Target
End Sub
」
コードモジュール
でSub SubRout (ByVal Target As Range)
Dim ValidChange As Boolean
ValidChange = True
'Check if change on sheet was a change to cell in named range
If Intersect(Target, Names("WB4aWBSRange").RefersToRange) Is Nothing Then ValidChange = False
If ValidChange = True And Target.value <> "" Then
'Do stuff
End If
End Sub
実行時エラーが交差ライン上で発生しますが、私はすべてのコードを上に移動した場合それはうまく動作する呼び出しルーチンに。
ありがとうございます。これは修正されていますが、私の知る限り、2つの処理方法がどう違うのですか?また、そのコードがWorksheet_Changeイベントまで移動したときにバージョンが機能するのはなぜですか? – laserdunc
私はそれを理解したかもしれないと思います。 'WB4aWBSRange'は、ブックレベルではなくシートレベルの名前付き範囲です。つまり、モジュール内のコードに移動したときに、単一の名前付き範囲に戻すことはできません。正しい?またはマイルオフ!? – laserdunc
@laserdunc - 'Names'はワークシートのプロパティです。ワークシート・モジュールから呼び出すと、ワークシート・スコープで使用されます。非ワークシートモジュールからifを呼び出すと、グローバルスコープで 'Names'が使用されます。 – Comintern