Excel VBA代码使用ThisWorkbook.Sheets(1).Range不工作,但Sheet1.Range工作正常。 为什么?

当我使用wb.Sheets(1).Range("A:A").Find(What:=ID, LookIn:=xlValues)我得到错误91 – 对象variables或未设置块。 当我使用Sheet1.Range("A:A").Find(What:=ID, LookIn:=xlValues)它返回正确的值。 为什么区别?

是否有我可以参考的stream程图或任何可用的简单信息来了解哪些子命令(我不知道合适的词)与ThisWorkbookSheets(#)Sheet#.Whatever

我很犹豫要使用Sheet("Name")因为名字可能稍后会改变。 我正在使用ThisWorkbook而不是ActiveWorkbook保留所有代码附加到相应的工作簿。

任何你可以提供的简单的参考信息将是伟大的。 我已经研究过了,但是还是不明白哪个子命令与哪个父命令一起工作。 (再次,可能是错误的术语)。

 Private Sub lstExample_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Dim wb As Workbook Dim I As Integer Dim ID As String Dim findValue As Range Set wb = ThisWorkbook 'Get the values of the selected row in listbox on doubleclick For I = 0 To lstExample.ListCount - 1 If lstExample.Selected(I) = True Then 'Set listbox column 1 as ID value to find ID = lstExample.List(I, 1) End If Next I 'Match ID (column A) on Sheet1 Set findValue = wb.Sheets(1).Range("A:A").Find(What:=ID, LookIn:=xlValues) MsgBox findValue End Sub 

表单(1)和Sheet1的属性之间没有区别,只要两者是相同的对象 – 工作表对象在您的情况。

你得到这个错误,因为findValue Is Nothing 。 也就是说,它无法在列中findID。 使用Find方法时,最好指定每个参数。 查找记住最后一次查find的内容,即使您在UI中执行了此操作,并使用了“在VBA中查找”。

例如,如果在执行查找时检查UI中的MatchCase。 然后你在VBA中查找并且不指定MatchCase属性,它将使用你上一次设置的任何东西。