Excel 如何复制一系列单元格

Excel 如何复制一系列单元格,excel,vba,Excel,Vba,我正在尝试将数据从关闭的Excel文件复制到当前所在的工作簿中。我想浏览文件,然后让宏完成其余的工作 目标工作簿中出现一个错误,显示 “应用程序定义或对象定义错误。” 以下是我到目前为止的情况。目标是我正在打开的工作簿,y是当前工作簿,或者至少应该是 Option Explicit Sub getfilename() Dim myFilePath As String Dim target As Workbook, y As Workbook myFilePath = Application.

我正在尝试将数据从关闭的Excel文件复制到当前所在的工作簿中。我想浏览文件,然后让宏完成其余的工作

目标工作簿中出现一个错误,显示

“应用程序定义或对象定义错误。”

以下是我到目前为止的情况。目标是我正在打开的工作簿,y是当前工作簿,或者至少应该是

Option Explicit
Sub getfilename()

Dim myFilePath As String
Dim target As Workbook, y As Workbook

myFilePath = Application.GetOpenFilename()

'copying
Set target = Workbooks.Open(myFilePath)

target.Sheets("Sheet1").Range("R9C2:R20C2").Copy

'pasting
Set y = ActiveWorkbook

y.Sheets("Adjustment").Cells("R57C4").PasteSpecial

'close
target.Close

End Sub 

RANGE对象需要A1表示法,而不是R1C1表示法。CELLS对象可以使用行编号和列编号(尽管也不需要R..C..结构)

Sub getfilename()

Dim myFilePath As String
Dim target As Workbook, y As Workbook

myFilePath = Application.GetOpenFilename()

Set y = ActiveWorkbook

'copying
Set target = Workbooks.Open(myFilePath)

'Here we're using the A1 notation
target.Sheets("Sheet1").Range("B2","B9").Copy

'Here we're using the Row & Column numbers notation
y.Sheets("Adjustment").Cells(57, 4).PasteSpecial

'close
target.Close

End Sub
此外,实际上不需要使用“复制”和“粘贴”特殊方法来复制值。在这样的小宏中,这不是什么大问题,但在更大的过程中,您会发现使用以下方法直接复制值更有效:
target.Range(“A1”、“A10”).value=source.Range(“A1”、“A10”).value

范围对象需要A1表示法,而不是R1C1表示法。单元格对象可以使用行号和列号(尽管也不需要R..C..结构)

Sub getfilename()

Dim myFilePath As String
Dim target As Workbook, y As Workbook

myFilePath = Application.GetOpenFilename()

Set y = ActiveWorkbook

'copying
Set target = Workbooks.Open(myFilePath)

'Here we're using the A1 notation
target.Sheets("Sheet1").Range("B2","B9").Copy

'Here we're using the Row & Column numbers notation
y.Sheets("Adjustment").Cells(57, 4).PasteSpecial

'close
target.Close

End Sub
此外,实际上不需要使用“复制”和“粘贴”特殊方法来复制值。在这样的小宏中,这不是什么大问题,但在更大的过程中,您会发现使用以下方法直接复制值更有效:
target.Range(“A1”、“A10”).value=source.Range(“A1”、“A10”).value

使用R1C1表示法获取范围有什么特殊原因吗?因为这是问题的根源,解决方案将取决于使用该表示法的原因。没有特殊原因,只是一直使用R1C1Use
y.Sheets(“调整”).Cells(57,4).PasteSpecial
。当您
打开
工作簿时,通常在打开源工作簿之前,它会变成
活动工作簿
集y=Active工作簿
。您使用R1C1表示法获取范围有什么特殊原因吗?因为这是您问题的根源,解决方案将取决于您选择的原因没有特别的原因,只是一直使用R1C1Use
y.Sheets(“调整”)。单元格(57,4).PasteSpecial
。当您
打开
工作簿时,通常在打开源工作簿之前,它会变成
活动工作簿
集y=Active工作簿
。不使用Copy/PasteSpecial的另一个很好的原因是,它会通过剪贴板,并且当宏在源工作簿中运行时,如果用户正在执行任何操作后台,用户也复制/粘贴某些内容,结果可能是灾难性的。+1建议不要使用它!不使用“复制/粘贴特殊”的另一个很好的理由是它通过剪贴板,如果用户在后台运行宏时正在做任何事,并且用户也复制/粘贴某些内容,则res结果可能是灾难性的。建议不要使用+1!