簡體   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