2

データ入力シートのセルの内容をシートの範囲に一致させる名前付き範囲を使用して、別のセルの内容に基づいてセルのリスト検証を設定しようとしていますValidation(この SO の質問を参照してください)。名前付き範囲の式は次のとおりです。

=OFFSET(validation!$B$1,MATCH(INDIRECT(ADDRESS(CELL("row"),CELL("col")-2)),validation!$A:$A,0)-1,0,COUNTIF(validation!$A:$A,INDIRECT(ADDRESS(CELL("row"),CELL("col")-2))),1)

問題は、によって参照されるセルADDRESS(CELL("row"),CELL("col")-2)が空の場合、VBA を使用して検証を設定するとRange.Validation.Addエラーが発生することです。

Application-defined or object-defined error

そして、セルに検証を追加しません。Validation.Add検証が設定されていることを確認するために、呼び出しで実行できるエラー処理はありますか? または、名前付き範囲式を変更して、シートの内容がADDRESS(CELL("row"),CELL("col")-2)一致しない場合でも値を出力する方法はありますか?validation

4

1 に答える 1

0

回避策として、これを試してください:

  1. ValList単純な範囲を参照するように名前付き範囲を変更します。
  2. 検証を設定します。
  3. 「ValList」を元の参照に戻します。

少し不格好ですが、うまくいくようです。

Sub SetVal()
    Dim s As String

    s = ActiveWorkbook.Names("ValList").RefersTo
    ActiveWorkbook.Names("ValList").RefersTo = "=UserEntry!$A$3:$A$6"

    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=ValList"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

    ThisWorkbook.Names("ValList").RefersTo = s
End Sub
于 2012-05-19T22:05:40.830 に答える