繁体   English   中英

Excel VBA .Find功能在选择中更改值

[英]Excel VBA .Find Function changing values in selection

Heya这可能很简单,但我无法弄清楚出了什么问题。

我正在尝试为特定日期执行.find并将该选择更改为用户输入日期。

我有一个userform从组合框中选择一个日期(date1_cbo)。 组合框源链接到工作表(后端)上的日期。 下面有一个文本框,用于编写新日期以将其更改为(date1_txt)。 我一直在收到错误

对象变量或未设置块变量。

我试过几个选项但没有运气这里是我的代码:

Dim selection As Range
Dim check As Boolean

'input box validation
check = IsDate(date1_txt.Value)
If check = True Then
    'find cell matching combobox
    With Worksheets("Backend").Range("A1:A500")
        Set selection = .Find(date1_cbo.Value) 'this is the problem
        selection.Value = date1_txt.Value
    End With
Else
End If

有趣的是.Find返回范围或Nothing。 然而,因为组合框与我正在搜索的细胞相关联,所以永远不会返回任何内容......我不明白错误发生的原因。

一个名为“选择”的变量是错误的编码实践,但完全合法。 为清楚起见,请勿使用此类名称。


当您尝试从null对象读取属性( .value )时,会导致错误91。 您的选择变量为空,因为工作表和组合框上的日期格式不同。


只需在尝试在工作表中找到它之前转换为日期。 Set selection = .Find(CDate(date1_cbo.Value)) '/ once again, selection is valid but bad name for variable.

您正在使用名为Selection的变量。 VBA也使用它。 将您的变量重命名为其他任何内容,重写您的代码,它应该工作。 甚至Selection1都很好:

Public Sub TestMe()

    Dim selection1 As Range
    With Worksheets(1).Range("A1:A500")
        Set selection1 = .Find("vi")
    End With

    If Not selection Is Nothing Then
        selection1.Value = "some other value"
    End If

End Sub

要使用Find()更改多个值 - A1:A10 ,那么可能会这样做:

Public Sub TestMe()

    Dim myRng As Range

    With Worksheets(1).Range("A1:A500")
        .Range("A1:A10") = "vi"
        Set myRng = .Find("vi")
        If Not myRng Is Nothing Then
            Do Until myRng Is Nothing
                myRng.Value = "New value"
                Set myRng = .Find("vi")
            Loop
        End If
    End With

End Sub

它有点慢,只要它每次都循环而且可以改进,如果范围是统一的并立即更换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM