3

私のコードは次のとおりです

If Cells(Target.Row, 2) = "" And (Cells(Target.Row, 3) = "" Or Cells(Target.Row, 3) = "") Then
    Sheets("MySheet").Activate
    Cells(Target.Row, 3).Activate
    ActiveCell.Validation.Delete
    If (Cells(Target.Row, 2) = "Type A") Then
        ActiveCell.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=AvailableVersions"
    ElseIf (Cells(Target.Row, 2) = "Type B") Then
        ActiveCell.Validation.Delete
    Else
        ActiveCell.Validation.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertInformation, Formula1:="0", Formula2:="9999999"
    End If
End If

したがって、ActiveCell.Validation.Addに到達するたびに、私が抱えている問題が発生します。

Run Time Error '1004': Application-defined or object-defined error

あまり有用なエラーではありません。また、これは番号とリストの検証タイプの両方で発生するため、ブックレベルのスコープを持つリスト自体の問題ではないと確信しています。ActiveCell.Validation.Deleteで発生することはありませんが、奇妙だと思いますか?

私はグーグル全体で解決策を見つけようとしていますが、ほとんどの場合、Activate呼び出しにもかかわらずフォーカスを奪うボタンから動的検証コードを実行することによって引き起こされることを示唆していますが、ボタンを押すのではなくシート変更イベントで実行しているので、これが私の問題だとは思わないでください-何かアイデアはありますか?私はこれで基本的に一日を無駄にしました!:(

4

1 に答える 1

2

ワークシートイベントからコードを実行していなければ、コードは問題ありません。私の場合、イベントプロシージャ内から新しいセルを選択しようとすると、問題が発生します。別のセルを選択せず​​に、コードが実行しようとしていたように見えるものを書き直しました。

これを試して:

If Cells(Target.Row, 2) = "" And (Cells(Target.Row, 3) = "" Or Cells(Target.Row, 3) = "") Then
    With Sheets("MySheet")
        .Cells(Target.Row, 3).Validation.Delete
        If (.Cells(Target.Row, 2) = "Type A") Then
            .Cells(Target.Row, 3).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=AvailableVersions"
        ElseIf (.Cells(Target.Row, 2) = "Type B") Then
            .Cells(Target.Row, 3).Validation.Delete
        Else
            .Cells(Target.Row, 3).Validation.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertInformation, Formula1:="0", Formula2:="9999999"
        End If
    End With
End If

他の考えられるエラーはAvailableVersions、がリストの有効な定義済みの名前でない場合です。

于 2012-12-06T17:01:49.380 に答える