Excel查找VBA无法正常工作

时间:2015-06-14 11:31:06

标签: excel vba excel-vba find

这是我试过的代码。但它仍然在找到单元格(Set RangeObj = Cells.find)。

请检查以下代码:

Sub CopyFromFile()
Dim MyFile As String
Dim erow
Dim Filepath As String
Filepath = "C:\Users\Nazmul Hossain Akash\Desktop\Play Excel\Final\"
MyFile = Dir(Filepath)
Do While Len(MyFile) > 0
    If MyFile = "zmaster.xlsm" Then
        Exit Sub
    End If

    Workbooks.Open (Filepath & MyFile)
    Range("B2:D18").Copy
    Set RangeObj = Cells(1, "A")
    ActiveWorkbook.Close

    Set RangeObj = Cells.Find(What:=RangeObj, After:=ActiveCell, _
    LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
    SearchDirection:=xlNext, MatchCase:=False)

    If RangeObj Is Nothing Then MsgBox "Not Found" Else RangeObj.Select
    ActiveCell.Offset(rowOffset:=2, columnOffset:=0).Activate

    ActiveSheet.PasteSpecial

    MyFile = Dir
Loop
End Sub

1 个答案:

答案 0 :(得分:2)

我想我看到了问题。您仍然没有Dim RangeObj(我在顶部看不到Option Explicit! - 请添加它)。这将使您Dim变量,因此您必须决定变量的数据类型,包括RangeObj。而RangeObj这是一个问题。由于您执行Set RangeObj = Cells.Find(),因此将此作为范围对象即可。但是,在此之前您执行Set RangeObj = ActiveWorkbook.Cells(1, "A") - 您Set。这是一个错误,因为这样你得到一个对象,之后你想在.Find()中使用它。您应该将任何内容传递给.Find(),而不是对象。让我们尝试解决问题:

  1. 在最顶部插入此行:

    Option Explicit
  2. 调暗RangeObj:

    Dim RangeObj as Range
  3. 介绍另一个用于将文本存储到.find()的变量:

    Dim RangeStr as String
  4. Set RangeObj = ActiveWorkbook.Cells(1, "A")替换为RangeStr = ActiveWorkbook.Cells(1, "A").Value

  5. Cells.Find(What:=RangeObj,替换为Cells.Find(What:=RangeStr,

  6. 让我们看看它带来了什么。