繁体   English   中英

Excel将工作簿与vba同步

[英]Excel synchronize workbooks with vba

我想问一下您是否可以帮助我将工作簿A中的一些工作表数据复制到我的活动工作簿(工作簿B)中

我在主工作簿中具有以下代码,用于从工作簿A复制数据

Public Sub Worksheet_Activate()

    test

End Sub


Sub test()
    Dim Wb1 As Workbook
    Dim MainBook As Workbook

    'Open All workbooks first:
    Set Wb1 = Workbooks.Open("Z:\Folder\WorkbookA.xlsm")
'Set MainBook = Workbooks.Open(Application.ActiveWorkbook.FullName)
Set MainBook = Application.ActiveWorkbook

'Now, copy what you want from wb1:
Wb1.Sheets("Projekte").Cells.Copy
'Now, paste to Main worksheet:
MainBook.Worksheets("Projekte").Range("A1").PasteSpecial xlPasteAll
Application.CutCopyMode = False

    'Close Wb's:
    Wb1.Close SaveChanges:=False

End Sub

我知道,它打开了工作表A,并且突出显示并复制了数据。

该脚本不会将其粘贴到工作表B(从中执行脚本)

有人知道我做错了吗?

亲切的问候,谢谢您的帮助!

您应该首先在原点之前设置Mainbook(目的地)(如果要使用ActiveWorkbook )。

'Set MainBook First
   Set MainBook = ThisWorkbook
'Open All workbook:
   Set Wb1 = Workbooks.Open("Z:\Folder\WorkbookA.xlsm")

为了清楚起见,这只是我担任OC的职责。

您必须正确引用您的工作簿和工作表对象

如果您必须粘贴范围的全部内容(包括格式,注释等),则需要编写如下代码(注释中的解释):

Option Explicit

Sub test()
    Dim targetSheet As Worksheet

    Set targetSheet = ActiveSheet 'store currently active sheet
    Workbooks.Open("Z:\Folder\WorkbookA.xlsm").Sheets("Projekte").UsedRange.Copy Destination:=targetSheet.Range("A1") ' open the wanted workbook and copy its "Projekte" sheet used range to 'targetSheet (i.e.: the sheet in the workbook where it all started) from its cell A1
    ActiveWorkbook.Close SaveChanges:=False ' close the currently active workbook (i.e. the just opened one)
End Sub

如果您只需要粘贴值,那么这就是方法(快得多!):

Option Explicit

Sub test()
    Dim targetSheet As Worksheet

    Set targetSheet = ActiveSheet 'store currently active sheet

    With Workbooks.Open("Z:\Folder\WorkbookA.xlsm").Sheets("Projekte").UsedRange ' open the wanted workbook and reference its sheet "Projekte" used range
        targetSheet.Range("A1").Resize(.Rows.Count, .Columns.Count).Value = .Value
        .Parent.Parent.Close SaveChanges:=False 'close the parent workbook of referenced range (i.e., the newly opened workbook)
    End With
End Sub

我的建议是永远不要使用ActiveWorkbook

在大多数情况下,当人们使用ActiveWorkbook他们实际上是在使用ThisWorkbook 区别在于:

  • ActiveWorkbook是当前选中的代码,它恰好在您的代码运行的那一刻“在屏幕上方”。 可以是用户在代码运行时单击的任何工作簿。 因此,您永远无法百分百确定获得正确的工作簿。

  • ThisWorkbook是您的代码当前运行的实际工作簿。 而且这永远不会改变。 因此,这是一个定义明确的参考,目前尚无关于哪个工作簿最重要的内容。

关于为什么您的方法无效的原因

Set Wb1 = Workbooks.Open("Z:\Folder\WorkbookA.xlsm") 'this line makes WorkbookA the active one
Set MainBook = Application.ActiveWorkbook 'this makes MainBook = WorkbookA

因此,一个简单的Set MainBook = Application.ThisWorkbook应该在这里工作。

另一个建议

Worksheets SheetsWorksheets是不同的。 确保可以使用Worksheets Sheets时不要使用Worksheets

  • 工作Sheets包含工作表和图表
  • Worksheets仅包含工作表

如果示例Sheets(1).Range("A1")是图表,则会失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM