我想将已打开的Excel实例中的数据复制到VBA中的另一个Excel实例。我试过了:
Option Explicit
Sub copy_paste()
Dim destination_sanitized As String
Dim fs As New FileSystemObject
destination_sanitized = fs.BuildPath("c:\temp\", "1.xlsx")
Dim xl As New Excel.Application
Dim wb As Workbook
Set wb = xl.Workbooks.Open(Filename:=destination_sanitized)
Dim r1 As Range
Dim r2 As Range
Set r1 = ThisWorkbook.Sheets("hidden").Range("E10:E13")
Set r2 = wb.Sheets("Sheet1").Range("J20:J23")
On Error GoTo Cleanup
r1.Copy r2
Cleanup:
wb.Close SaveChanges:=False
Set xl = Nothing
MsgBox Err.Number & ": " & Err.description
End Sub
我得到运行时错误'1004':Range类的复制方法失败
如何将数据从已打开的Excel实例复制到VBA中的另一个Excel实例?
我理解当他们是同一个实例的一部分时如何做到这一点。在这种特殊情况下,我需要将两个工作簿放在不同的实例中。我还需要做一个完整的副本(数据验证,公式,值,格式等),所以r2.Value = r1.Value是不够的。
答案 0 :(得分:1)
我认为您需要详细说明为什么需要单独的实例,到目前为止,在我的职业生涯中,我从来没有任何理由在Excel中使用单独的实例,这是自动化的噩梦。
话虽如此,你可以试试这样的东西(假设你只打开了2个实例):
Sub MM()
Dim varTask As Variant
Dim XL1 As Application, XL2 As Application
Dim r1 As Range, r2 As Range
Dim OtherWB As Workbook
Dim destination_sanitized As String
destination_sanitized = CreateObject("Scripting.FileSystemObject").BuildPath("C:\temp\", "1.xlsx")
With CreateObject("Word.Application")
If .Tasks.Exists("Microsoft Excel") Then
For Each varTask In .Tasks
Debug.Print varTask
If InStr(varTask.Name, "Microsoft Excel") = 1 Then
If XL1 Is Nothing Then
Set XL1 = GetObject(Replace(varTask, "Microsoft Excel - ", "")).Application
Else
Set XL2 = GetObject(Replace(varTask, "Microsoft Excel - ", "")).Application
End If
End If
Next varTask
End If
.Quit
End With
'Then something like...
Set r1 = ThisWorkbook.Sheets("hidden").Range("E10:E13")
Set OtherWB = XL2.Workbooks.Open(destination_sanitized)
Set r2 = OtherWB.Sheets("Sheet1").Range("J20:J23")
r1.Copy r2
'Clear down memory afterwards
Set r1 = Nothing
Set r2 = Nothing
OtherWB.Close False
Set OtherWB = Nothing
Set XL1 = Nothing
XL2.Quit
Set XL2 = Nothing
End Sub
答案 1 :(得分:1)
在所有情况下,很难让两个Excel实例相互通信。您可以找到其他正在运行的实例,但有太多事情需要考虑。
在类似的情况下,我保持简单并制作两个按钮:
用户负责单击一个实例上的“导出”按钮,然后单击第二个实例上的“导入”按钮。