0

通常、vbaを介してExcelでデータ検証を適用することは可能ですが、私は特定の問題を抱えています

検証を適用するために間接的な方法を使用しています。通常、vbaを使用しない場合、「ソースは現在エラーと評価されています。続行しますか?」というExcelによる警告が表示されます。(これは、間接的に参照するセルが空である可能性があるためです)、「はい」をクリックすることで、Excelでこのエラーを簡単にスキップできるようになりました

リンクは次のとおりですhttp://www.contextures.com/xldataval02.html(依存検証リスト)

しかし、vbaを使用して同じことを実行しようとすると、ランタイムエラーが発生しますが、続行できるわかりやすいプロンプトがありません。この種のエラーを処理するにはどうすればよいですか。

エラーが発生すると、vbaは検証をまったく適用しないため、レジュームは機能しません。

これがコードです

Set rng = ThisWorkbook.Sheets("input").Range("AB11:AB65536")
With rng.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:= _
    "=INDIRECT(cablecode&""_depth_""&$Q11&""_""&$Z11&""_values"")"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

ケーブルコードは静的な名前付き範囲です

Q11とZ11は、その特定の行の入力を参照します

深さは通常の文字列です

ケーブルコードには、「is」または「iec」の2つの値を指定できます。

Q11は「xlpe」または「pvc」にすることができます

Z11は「al」または「cu」にすることができます

ケーブルコードは、直接参照されるプロジェクト全体で一定であるため、Q11とZ11は行ごとに異なる可能性があり、別々に参照されます。

文字列全体が「is_depth_al_xlpe_values」と同様に異なるパーミュレーションになり、すべての名前付き範囲がすでに定義されています

4

2 に答える 2

1

次の行はから修正が必要だと思います

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:= _
    "=INDIRECT(cablecode&""_depth_""&$Q11&""_""&$Z11&""_values"")"

dim cellToBeReferred as string
cellToBeReferred = cablecode & "_depth_" & Range("$Q11").Value & "_" _
& Range("$Q11").Value & "_values"

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:= _
    "=INDIRECT(" & cellToBeReferred  & ")"

文字列を取り出すと、問題をデバッグし、参照したい名前付き範囲の値を把握するのに役立ちます。上記を使用して、結果の値cellToBeReferredを確認し、連結を修正します。

OPコメントを読んだ後に編集する

その場合は、で囲み、INDIRECTダミーISERRORのセル参照を指定します。例えば

"=IFERROR(INDIRECT(" & cellToBeReferred  & "), Z1)"

INDIRECTここで、Z1は、失敗した場合に参照されるセルです。

于 2012-05-09T05:48:48.620 に答える
0

VBAで警告を抑制する方法はありません。参照セルに一時的に値を割り当て、後でクリアします。これにより、[ソースは現在エラーと評価されています。続行しますか]ダイアログボックスで[はい]を選択したときにUIによって回避される実行時エラーを防ぐことができます。

元。

thisworkbook.range("Q11").value = "1"

'data validation - i.e. Formula1:="=INDIRECT(Q11)"

thisworkbook.range("Q11").value = ""
于 2020-11-12T20:45:30.527 に答える