使用验证在 VBA 中获取应用程序定义或对象定义的错误

Getting an Application-defined or Object-defined error in VBA using Validation

我正在尝试使用活动单元格的偏移量获取某个地址。但它总是抛出错误“Object variable or With block variable not set”。任何人都可以指出我的错误并进行更正吗?提前致谢。

代码如下:

    *OTHER CODES HERE*      

            Dim offsetter As Range
            offsetter = ActiveCell.Offset(0, -2).Address(False, False) //Error on this line

            With Selection.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                Operator:=xlBetween, Formula1:="=INDIRECT(SUBSTITUTE("&offsetter&",' ','_'))"
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = True
            End With

     *OTHER CODES HERE*

我已经更新了代码,我犯的错误是将变量声明为范围,而它应该是字符串。

我现在收到一个新错误“应用程序定义或对象定义的错误

        *OTHER CODES HERE*      

            Dim offsetter As String
            offsetter = ActiveCell.Offset(0, -2).Address(False, False)

            With Selection.Validation
                .Delete
            //Error on this line [.add]
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                Operator:=xlBetween, Formula1:="=INDIRECT(SUBSTITUTE("&offsetter&",' ','_'))"
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = True
            End With

     *OTHER CODES HERE*

这是最终的工作代码:

            Dim offsetter As String
            offsetter = ActiveCell.Offset(0, -2).Address(False, False)

            With Selection.Validation
                .Delete
                'Application-defined or Object-defined error
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                Formula1:="=INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(""" _
                & offsetter & ""","" "",""_""),""-"",""_""),""/"",""_""),""("",""""),"")"",""""))"
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = True
            End With

谢谢大家!

一个验证对象有以下三个方法:

Add Delete Modify

虽然 AddModify 致力于验证本身,但 Delete 删除了 整个 对象。这就是为什么之后您无法添加验证或指定任何其他属性的原因。

这是我完成的最终工作代码。

        Dim offsetter As String
        offsetter = ActiveCell.Offset(0, -2).Address(False, False)

        With Selection.Validation
            .Delete
            'Application-defined or Object-defined error
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
            Formula1:="=INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(""" _
            & offsetter & ""","" "",""_""),""-"",""_""),""/"",""_""),""("",""""),"")"",""""))"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With