【问题标题】:VBA to open workbook, copy certain cells into specific sheets, and close source woorkbookVBA 打开工作簿,将某些单元格复制到特定工作表中,并关闭源工作簿
【发布时间】:2020-04-03 07:08:28
【问题描述】:

我创建了一个工作簿,我将其发送给其他员工,以便他们记录某些项目。用户将工作簿保存为“STATS(他们的徽章编号)”并将其发回。我从他们的书 (Sheet1.range("B4:B29") 和 .Range("F1:G2) 复制单元格并粘贴到我的主工作簿 (STATS Total) 上以每个员工的姓氏命名的选项卡上。我是试图自动打开他们发给我的大量书籍(都在同一个文件夹中),复制数据,然后将其粘贴到相同的单元格中(B4:B29 和 F1:G2 在他们命名的工作表上,然后关闭“源”工作簿。为了提供帮助,我将 Cell 中每个“源”书的完整路径名(“I2”放在主簿的工作表上。所以在主簿中,有一个名为“Smith”的工作表,在 I2 中是工作簿的路径名他发给我。这是我尝试过的代码,但我无法让它工作。我应该做些什么不同的事情?

Sub CopyAndPaste()
Dim x As Workbook, y As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet

Set x = Workbook(Sheet6.Range("I2").Text) 'copied book
Set y = ThisWorkbook 'pasted to this book


Set ws1 = x.Sheet1 'copied from
Set ws2 = y.Sheets("copied to")

ws1.Cells.Copy ws2.Cells
y.Close True
x.Close False
End Sub

【问题讨论】:

  • 指定 "I can't get it to work" 的实际含义(什么错误,哪一行抛出,等等...)
  • 在“Set x...”行上以“Sub or Function Not Defined”开头
  • 对此我很抱歉 - 我知道最好不要忽略它。似乎不允许我使用 "Sheet6.Range("I2").Text" 来指定工作簿。

标签: excel vba copy paste


【解决方案1】:

你应该使用:

Sheet6.Range("I2").value

代替:

Sheet6.Range("I2").text 

不仅如此,如果工作簿尚未打开,您需要打开它(我想如果您必须为多个工作簿执行此操作,则情况并非如此)。所以你可以:

Dim x As Workbook, y As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim input_workbook as String

Set y = ActiveWorkbook 'I consider this as the workbook you launch the macro from
input_workbook = Sheet6.Range("I2").value 

'I guess Sheet6 is in workbook y ... 
'in any case, it should represent a folder path with the workbook name, 
'like "C:\Documents\MyExcelFile.xlsx"

Set x = workbooks.open(filename:=input_workbook) 'The input workbook that you need to open

'... rest of the code ...

希望这会有所帮助!

#1 编辑

要回答您的问题,您现在可以简单地使用 x 和 y 作为工作簿。所以你可能有:

Dim ws1 As Worksheet, ws2 As Worksheet

Set ws1 = y.sheets("your_y_sheet_name")
Set ws2 = x.sheets("your_x_sheet_name")

然后您可以使用这些变量来传输数据:

ws1.range("B1:C10").value = ws2.range("B1:C10").value

这将使 ws1 (wb y) 中的范围 B1:C10 等于 ws2 (wb x) 中的范围。这绝对比复制/粘贴快。所以,如果你有一个固定的范围从 x 转移到 y,就这样使用(只要使用正确的范围;它们应该具有相同的大小)。

完成 x 工作簿后,不要忘记将其关闭:

x.close

【讨论】:

  • 谢谢。此代码打开我需要打开的工作簿。但是要将从新书中复制的内容设置为 y (你是对的,那是宏启动的地方并且是 activeworkbook,我如何调用 ne 工作簿?Workbooks(Filename:=input_workbook).Sheet1 给出错误“未找到命名参数”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
相关资源
最近更新 更多