打开用户指定的 Excel 工作簿并将数据范围复制到另一个工作簿

Posted

技术标签:

【中文标题】打开用户指定的 Excel 工作簿并将数据范围复制到另一个工作簿【英文标题】:Open user specified Excel workbook and copy data range to another workbook 【发布时间】:2013-03-26 15:54:43 【问题描述】:

我正在尝试在 Excel 中运行一个宏,用户选择要打开的文件,该宏将从该工作簿复制一个范围并将其粘贴到原始工作簿中用户指定的单元格。我对代码的尝试如下所示。我将“wbThis”作为要粘贴到的原始工作簿,将“wbTarget”作为正在打开和复制的工作簿。当我运行代码时,我可以选择要打开的文件,但它给出了一个错误,提示“需要对象”,并且不会进一步进行复制和粘贴。

有没有办法使用 Workbook.Open 代替 Application.GetOpenFilename 但仍然让用户能够选择要打开的文件?

感谢您的帮助。

Dim wbTarget As Workbook
Dim wbThis As Workbook

Set wbThis = ActiveWorkbook
Set wbTarget = Application.GetOpenFilename(FileFilter:="Excel workbook (*.xls),*.xls", Title:="Open data")

wbThis.Activate
Set rDest = Application.InputBox(Prompt:="Please select the Cell to paste to", Title:="Paste to", Type:=8)
On Error GoTo 0
wbTarget.Activate
Application.CutCopyMode = False
wbTarget.Range("A1").Select
wbTarget.Range("B6:B121").Copy
wbThis.Activate
rDest.PasteSpecial (xlPasteValues)
Application.CutCopyMode = False

wbTarget.Close False

【问题讨论】:

【参考方案1】:

GetOpenFileName 并不真正打开文件,只是获取它的名称。 试试Application.Workbooks.Open(TheResultOfGetOpenFileName)

dim FileName as string
FileName = Application.GetOpenFilename(FileFilter:="Excel workbook (*.xls),*.xls", Title:="Open data")

Set wbTarget = Application.Workbooks.Open(FileName)

【讨论】:

非常感谢您的帮助!我必须更改代码中的另一件事才能使其正常工作,如下所示。 Range("A1").Select Range("B6:B121").Copy

以上是关于打开用户指定的 Excel 工作簿并将数据范围复制到另一个工作簿的主要内容,如果未能解决你的问题,请参考以下文章

excel vba复制数据范围,打开新的xlsx文件重命名表并保存

如何用VBA把一个工作簿中的工作表内容复制到另一个汇总工作簿里面的指定的工作表里面去?

Excel VBA 从关闭的工作簿中读取数据,带有 ADODB、动态范围和标题可选

将工作表从一个工作簿(未打开)复制到打开的工作簿

vba excel怎么获取指定工作表的行数、列数

Excel VBA:获取单击按钮的行[重复]