VBA找不到字符串

时间:2018-11-15 16:27:54

标签: excel vba string find

我要VBA查找一个字符串,然后是结尾字符串,然后复制它们之间的所有行以粘贴到另一张纸上。但是,当我运行代码时,找不到字符串。我已经在一个单独的文件中测试了代码,并使用相同的两个字符串作为起点和终点,并且效果很好。

在联机查看后,我看到单元格格式可能是导致这种情况的原因,但我看不到如何更改它,即使在这种情况下也是如此。感谢您的帮助

Dim findrow As Long, findrow2 As Long
On Error GoTo errhandler

findrow = Range("A:A").Find("0667 John Smith", Range("A1")).Row
findrow2 = Range("A:A").Find("TTl Hrs For Employee", Range("A" & findrow)).Row

Range("A" & findrow & ":A" & findrow2).Select
Selection.Copy
Sheets("Sheet2").Select
Range("C12").Select
ActiveSheet.Paste

errhandler:
MsgBox "No Cells containing specified text found"

Picture is example of what I'm trying to copy
如果我在新文档中键入完全相同的内容,代码将发现没有问题。但是,在原始版本中,我在第一行“ findrow”行中收到了一条代码91错误。

3 个答案:

答案 0 :(得分:0)

假设存在值,这对我来说很好:

findrow = Range("A:A").Find("0667 John Smith", Range("A1")).Row
findrow2 = Range("A:A").Find("TTl Hrs For Employee", Range("A" & findrow)).Row
Range("A" & findrow & ":A" & findrow2).Copy Worksheets("Sheet2").Range("C12")

只要要搜索的表处于活动状态。您可能需要在代码中指定它:

findrow = Worksheets("Sheet1").Range("A:A").Find("0667 John Smith", Worksheets("Sheet1").Range("A1")).Row
findrow2 = Worksheets("Sheet1").Range("A:A").Find("TTl Hrs For Employee", Worksheets("Sheet1").Range("A" & findrow)).Row
Worksheets("Sheet1").Range("A" & findrow & ":A" & findrow2).Copy Worksheets("Sheet2").Range("C12")

答案 1 :(得分:0)

更新: 找出问题所在。由于某种原因,“查找”功能无法在原始工作表中找到任何一个字符串。如果我将整个工作表复制到一个新工作表中,然后让我的代码搜索字符串,它会找到它们并按应有的方式复制它们。 我不知道是什么导致它执行此操作,并且效率不高,但是,它可以正常工作。谢谢你们帮助我解决问题,特别感谢@FunThomas

答案 2 :(得分:0)

使用完全限定的(至少至多为工作表对象)范围引用,并始终指定Find()方法LookAtLookIn参数,以不隐式地假定最后一个方法的使用(即使从Excel UI)一个:

Dim firstCell As Range, lastCell As Range

With Worksheets("MySheetName") ' reference sheet where to serach for text (change "MySheetName" to your actual sheet name)
    Set firstCell = .Range("A:A").Find("0667 John Smith", Range("A1")) ' try and find first cell
    If Not firstCell Is Nothing Then ' if first cell found
        Set lastCell = .Range("A:A").Find(what:="TTl Hrs For Employee", lookat:=xlWhole, LookIn:=xlValues, after:=firstCell) ' try find last cell
        If Not lastCell Is Nothing Then ' if last cell found
            .Range(firstCell, lastCell).Copy Sheets("Sheet2").Range("C12")
        Else
            MsgBox "No Cells containing specified 'TTl Hrs For Employee'"
        End If
    Else
        MsgBox "No Cells containing specified '0667 John Smith'"
    End If
End With