繁体   English   中英

为什么我在VBA中查找错误?

[英]Why am I getting an error with Find in VBA?

我正在尝试使用VBA搜索范围内的字符串。 我拼凑了一些代码,但我在“If Not”行中一直收到1004错误:

Sub test1()

Dim wb As Workbook
Dim ws As Worksheet
Dim found_range As Range
Dim search_range As Range

Set wb = Workbooks("D1")
Set ws = wb.Sheets("Master data")

Set search_range = ws.Cells(147, 1).EntireRow

If Not Range(search_range).Find("Test") Is Nothing Then
    'match found
    Set found_range = Range(search_range).Find("Test")
    Debug.Print found_range.Column
Else
    MsgBox "No match found"
    'no match found
End If

End Sub

关于为什么我收到错误的任何想法?

我有点混淆了.Find
如果Range.Find方法已经返回一次Range对象,则无需将其设置两次。

search_range也是一个Range对象,因此需要尝试将其封装在另一个Range()对象中。

事实上,这是你得到错误的原因,因为它期望在类型转换Range(<string>)内的Range(<string>)

正如@MathieuGuindon正确指出:

它是错误的原因,但原因是因为非限定Range调用是ActiveSheet的子对象,而你不能做Sheet1.Range(Sheet2.Cells(1, 1)Sheet2.Cells(1,> 10)) - 在OP的代码中抛出错误1004,因为ws不是ActiveSheet ; 使用ws限定Range调用也会修复错误...但是, Range(someRange )肯定是多余的。

Sub test1()

  Dim wb As Workbook
  Dim ws As Worksheet
  Dim found_range As Range
  Dim search_range As Range

  Set wb = Workbooks("D1")
  Set ws = wb.Sheets("Master data")

  Set search_range = ws.Cells(147, 1).EntireRow
  Set found_range = search_range.Find("Test")

  If Not found_range Is Nothing Then
      Debug.Print found_range.Address
  Else
      MsgBox "No match found"
  End if

End Sub

你可以使用:

Option Explicit

Sub test1()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim found_range As Range, search_range As Range

    Set wb = Workbooks("D1")
    Set ws = wb.Sheets("Master data")

    Set search_range = ws.Rows(147).EntireRow
    Set found_range = search_range.Find(What:="Test", LookIn:=xlValues, LookAt:=xlWhole)

    If Not found_range Is Nothing Then

        Debug.Print found_range.Column

    Else
        MsgBox "No match found"
        'no match found
    End If

End Sub

注意:

  • 我想要完全匹配你应该使用LookAt:= xlWhole

暂无
暂无

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

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