【问题标题】:Copy Range between two instances of excel在两个excel实例之间复制范围
【发布时间】:2014-12-31 14:51:01
【问题描述】:

我正在运行两个单独的 Excel 实例,并尝试将数据从一个工作簿中的范围复制到另一个工作簿。

我有这个代码:

Sub CopyValues()
Dim xlApp As Excel.Application
Set xlApp = GetObject(, "Excel.Application")
Dim Src As Range
Dim Dst As Range
    Set Src = xlApp.ActiveSheet.Range("A1:A9")
    Set Dst = Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("A1:A9")
    Src.Copy Dst
End Sub

它不会返回任何错误,但不会复制值, 最后一行也试过这个

Src.Value = Dst.Value

还是什么都不做

我的 VBA 技能不太好,两周前才开始学习。

【问题讨论】:

  • 您实际上是打开了多个 Excel 实例,还是仅在一个实例中打开了多个文件?
  • 两件事:你为什么使用ActiveSheet?您应该为Src 定义工作表。另外,试试Src.CopyDst.PasteSpecial xlPasteValues?
  • 能否提供 Excel 的版本? XL2013 对应用程序窗口和实例的处理与早期版本略有不同。
  • 使用GetObject 绝不是捕获程序的多个实例的好方法。您需要控制第二个实例的打开。为什么有两个实例是不可避免的?

标签: vba excel


【解决方案1】:

如果您想避免使用剪贴板,并假设您对其他 Excel 实例 (xlApp) 的句柄是正确的,那么您应该能够使用数组来获取和设置您的数据。

Sub CopyValues()
    Dim xlApp As Excel.Application
    Dim Src As Range
    Dim Dst As Range
    Dim Vals() as Variant

    Set xlApp = GetObject(, "Excel.Application")

    Set Src = xlApp.ActiveSheet.Range("A1:A9")
    Set Dst = Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("A1:A9")

    Vals = Src
    Dst.Value = Vals
End Sub

【讨论】:

  • 仍然什么都不做,所以我认为我的句柄不正确。所以这是我的主要问题,如何让 xlApp 指向正确的范围。此外,当我尝试使用 Src.Copy 和 Dst.PasteSpecial xlPasteValues 时,它会粘贴空单元格。顺便说一句,如何将代码插入 cmets?
  • @pnuts 是的,对于短代码,但是如何?就像我之前的评论“Src.Copy and Dst.PasteSpecial xlPasteValues”
【解决方案2】:

所以我设法让我的代码正常工作,问题出在句柄上,改变了这个:

Set xlApp = GetObject(, "Excel.Application")

Set xlApp = GetObject("c:\mypath\book1.xlsm").Application

并且还使用上一个答案的建议更改了复制方法

因此,面对此问题的任何人的完整工作代码是:

Sub CopyValues()
Dim xlApp As Excel.Application
Dim Src As Range
Dim Dst As Range
Dim Vals() as Variant

Set xlApp = GetObject("c:\mypath\book1.xlsm").Application

Set Src = xlApp.ActiveSheet.Range("A1:A9")
Set Dst = Workbooks("Book2.xlsm").Worksheets("Sheet1").Range("A1:A9")

Vals = Src
Dst.Value = Vals
End Sub

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多