繁体   English   中英

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

[英]Excel vba code using ThisWorkbook.Sheets(1).Range not working, but Sheet1.Range works fine. Why?

当我使用wb.Sheets(1).Range("A:A").Find(What:=ID, LookIn:=xlValues)我得到错误91 - 对象变量或没有设置块。 当我使用Sheet1.Range("A:A").Find(What:=ID, LookIn:=xlValues)它返回正确的值。 为什么不同?

是否有我可以参考的流程图或任何可用的简单信息,以了解哪些子命令(我不知道正确的单词)与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

只要两者都是相同的对象(在您的情况下为Worksheet对象),Sheets(1)和Sheet1的属性之间没有区别。

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

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

暂无
暂无

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

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