原因你的错误,在于以下部分:
Dim y As Workbook
Set y = Sheets("Sheet1").Select
您定义y
为工作簿,但试图将Worksheet
对象分配给它,您添加Select
出于某种原因,这是挑衅不推荐。
它应该是(如果工作簿是打开的):
Set y = Workbooks("YourBookName")
你的代码的其余部分会工作得很好。
然而,读您的文章,我觉得你的意思来定义y As Worksheet
。
然后你的代码的其余部分应该是:
Set y = Sheets("Sheet1")
val = x.Sheets("Sheet2").Range("A1").Value
y.Range("A1").Value = val
编辑1:更新后的代码(根据PO的新数据)
Option Explicit
Sub test()
Dim x As Workbook
Dim y As Workbook
Dim Val As Variant
Dim filename As String
Set y = ThisWorkbook ' set ThisWorkbook object (where this code lies)
Set x = Workbooks.Open("D:\Mikz\xxx.xlsx")
Val = x.Sheets("Sheet2").Range("A1").Value
y.Sheets("Sheet1").Range("A1").Value = Val
x.Close
End Sub
编辑2:代码复制列A:E直到最后一行有数据
Option Explicit
Sub test()
Dim x As Workbook
Dim y As Workbook
Dim Val As Variant
Dim filename As String
Dim LastCell As Range
Dim LastRow As Long
Set y = ThisWorkbook ' set ThisWorkbook object (where this code lies)
Set x = Workbooks.Open("D:\Mikz\xxx.xlsx")
With x.Sheets("Sheet2")
' use the find method to get the last row in column A:E
Set LastCell = .Columns("A:E").Find(What:="*", After:=.Cells(1), Lookat:=xlPart, LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
If Not LastCell Is Nothing Then ' find was successful
LastRow = LastCell.Row ' get last Row with data
End If
Val = .Range("A1:E" & LastRow).Value ' save range in 2-D array
End With
' resize the range from A1 through column E and the last row with data in copied workbook
y.Sheets("Sheet1").Range("A1").Resize(LastRow, 5).Value = Val
x.Close
End Sub
我添加了代码,这是你最后提到的。我得到一个类型不匹配的错误 – Mikz
@Mikz你是否也将Dim y更改为Worksheet? –
错误发生时,当试图打开x中提到的工作簿,而ist加载,然后我得到错误,类型不匹配 – Mikz