这是我试过的代码。但它仍然在找到单元格(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
答案 0 :(得分:2)
我想我看到了问题。您仍然没有Dim
RangeObj
(我在顶部看不到Option Explicit
! - 请添加它)。这将使您Dim
变量,因此您必须决定变量的数据类型,包括RangeObj
。而RangeObj
这是一个问题。由于您执行Set RangeObj = Cells.Find()
,因此将此作为范围对象即可。但是,在此之前您执行Set RangeObj = ActiveWorkbook.Cells(1, "A")
- 您Set
。这是一个错误,因为这样你得到一个对象,之后你想在.Find()
中使用它。您应该将任何内容传递给.Find()
,而不是对象。让我们尝试解决问题:
在最顶部插入此行:
Option Explicit
调暗RangeObj:
Dim RangeObj as Range
介绍另一个用于将文本存储到.find()
的变量:
Dim RangeStr as String
将Set RangeObj = ActiveWorkbook.Cells(1, "A")
替换为RangeStr = ActiveWorkbook.Cells(1, "A").Value
将Cells.Find(What:=RangeObj,
替换为Cells.Find(What:=RangeStr,
让我们看看它带来了什么。