【问题标题】:Copy from One Workbook in Excel to Another Workbook从 Excel 中的一个工作簿复制到另一个工作簿
【发布时间】:2015-12-14 12:57:09
【问题描述】:

我最终会选择更复杂的东西,但我什至无法让这个简单的版本工作。

它会打开其他文件,但它只会将第二个工作簿(包含要复制内容的宏的那个)留空。

我尝试了其他“在工作簿之间复制/粘贴”线程的一些建议,但没有任何效果。

大多数给我一个“工作表类的粘贴方法失败”错误,我不知道如何修复,因为即使 PasteSpecial 也无法修复它?

我对 VBA 比较陌生,需要为我的工作运行一些东西。提前感谢您的帮助!

在下面的示例代码中,我尝试从 CPWholeDocTest1.xlsx 复制到 CPWholeDocTest2.xlsm。

Sub CopyPasteRawData()

Dim x As Workbook
Dim y As Workbook

'## Open both workbooks first:
Set x = Workbooks.Open("C:\Users\rnewma\Documents\Excel Projects\Test\CPWholeDocTest1.xlsx")
Set y = Workbooks.Open("C:\Users\rnewma\Documents\Excel Projects\Test\CPWholeDocTest2.xlsm")

'Now, transfer values from x to y:
y.Sheets("Test").Range("A1:B5").Value = x.Sheets("Sheet1").Range("A1:B5")

'Close x:
'x.Close

End Sub

【问题讨论】:

  • 您是从启用宏的工作簿运行此代码,还是尝试从 .xlsx 文件运行它?
  • 来自 xlsm 文件,所以应该启用宏。
  • 你在下面测试了 R3uK 的答案吗,因为我看不出代码有什么问题。
  • 是的,我做到了。它完全空白。我什至将他的修改复制/粘贴到我的上面,以确保我没有遗漏任何其他内容,而我什么也没得到。
  • 如果您在 .xlsm 工作簿中运行代码,请将 Set y = Workbooks.Open(".....") 更改为设置 y = ThisWorkbook。对我有用。

标签: vba excel copy-paste


【解决方案1】:

将数据从一个范围传输到另一个范围时,必须添加.Value.Value2 才能显式!
.Value为默认属性,不指定时为隐式):

Sub CopyPasteRawData()

Dim x As Workbook
Dim y As Workbook

'## Open both workbooks first:
Set x = Workbooks.Open("C:\Users\rnewma\Documents\Excel Projects\Test\CPWholeDocTest1.xlsx")
Set y = Workbooks.Open("C:\Users\rnewma\Documents\Excel Projects\Test\CPWholeDocTest2.xlsm", ReadOnly:=False)
DoEvents
'Now, transfer values from x to y:
y.Sheets("Test").Range("A1:B5").Value = x.Sheets("Sheet1").Range("A1:B5").Value

'Close x:
'x.Close

End Sub

【讨论】:

  • 这仍然只是我要复制到的书中的空白。
  • 它们是大工作簿吗? x.Sheets("Sheet1").Range("A1:B5")里面的数据是什么?
  • 我将为您链接它们,但这只是我正在做的概念证明,它们很小。真实的东西将相当庞大。 drive.google.com/file/d/0ByUxX8rRDJttZzVBaS1QM1U2ajQ/…drive.google.com/file/d/0ByUxX8rRDJtta1l0dGhaUTZhNDA/…
  • Mkay...它们看起来不错...该版本是否受保护?因为它们可能以只读或类似的方式打开!尝试编辑,我禁用了目标工作簿上的只读! ;)
  • Alex4336 解决了它。我需要将“y = Workbooks.Open”部分替换为“y = ThisWorkbook”,并将“.Value”添加到我的复制/粘贴代码的末尾。
【解决方案2】:

我想发布这个来帮助其他人,因为有很多其他的帖子不太正确但足够接近让我感到困惑。希望这可以在未来对其他人有所帮助。

工作代码:

Sub CopyPasteRawData2()

' CopyPasteRawData Macro
'
Dim x As Workbook
Dim y As Workbook

'## Open both workbooks first:
Set x = Workbooks.Open("pathname of file you are copying from")
Set y = ThisWorkbook

'Now, transfer values from x to y:
y.Sheets("sheet you are copying to").Range("A1:B5").Value = x.Sheets("sheet you are copying from").Range("A1:B5").Value

'Close x:
x.Close

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    相关资源
    最近更新 更多