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。然而,因为组合框与我正在搜索的细胞相关联,所以不应该返回任何内容......我不明白为什么会发生错误。
答案 0 :(得分:2)
一个名为'selection'的变量是错误的编码实践,但完全合法。为清楚起见,请勿使用此类名称。
当您尝试从null对象读取属性(.value
)时,会导致错误91。您的选择变量为空,因为工作表和组合框上的日期格式不同。
在尝试在工作表中找到它之前,只需转换为日期。
Set selection = .Find(CDate(date1_cbo.Value)) '/ once again, selection is valid but bad name for variable.
答案 1 :(得分:1)
您正在使用名为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
它有点慢,只要它每次都循环而且可以改进,如果范围是统一的并立即替换。