2015-06-14 97 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