2015-06-14 102 views
-1

这是我试过的代码。但它被困在寻找细胞(Set RangeObj = Cells.find)。Excel查找VBA无法正常工作

请检查下面的代码:

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 
+0

** 1。**编码时始终使用'Option Explicit'!你从来没有''Dim'你的'RangeObj' ** 2 **引用范围时总是**显式**。当你声明'Set RangeObj = Cells(1,“A”)'时,VBA不知道你在讨论哪个工作簿和工作表,所以它会尽力猜测。你应该这样做:'Set RangeObj = ThisWorkBook.Sheets(“Sheet1”)。Cells(1,“A”)'。 ** 3。**我相信你会遇到错误,因为在设置RangeObj之后,你关闭了该工作簿......在引用你需要的工作簿时更加明确。 – ZygD

+0

我不能在这里定义工作表名称,因为每个文件都有一个名称和他们的文件名。所以我现在用这个http://prntscr.com/7gtdn3 –

回答

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:=RangeStr,

更换Cells.Find(What:=RangeObj,让我们来看看它带来的。

+0

对您有帮助吗? – ZygD