我想问你是否可以帮我将工作簿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(执行脚本的地方)
有人知道我做错了吗?
最诚挚的问候,并感谢您的帮助!
答案 0 :(得分:0)
您应该首先在原点之前设置Mainbook(目标)(如果您要使用ActiveWorkbook
)。
'Set MainBook First
Set MainBook = ThisWorkbook
'Open All workbook:
Set Wb1 = Workbooks.Open("Z:\Folder\WorkbookA.xlsm")
为了清楚起见,这只是我在这个上的OC。
答案 1 :(得分:0)
您必须正确引用您的工作簿和工作表对象
如果你必须粘贴范围的整个内容(包括格式,注释......),那么你想编写如下代码(注释中的解释):
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
答案 2 :(得分:0)
我的建议是永远不要使用ActiveWorkbook
。
在大多数情况下,当人们使用ActiveWorkbook
时,他们实际上打算使用ThisWorkbook
。区别在于:
ActiveWorkbook
是当前选定的屏幕上方的#34;"确切地说,代码运行的那一刻。这可以是用户在代码运行时单击的任何工作簿。因此,您永远无法100%确定获得正确的工作簿。
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
应该适用于此。
另一项建议
Sheets
和Worksheets
不一样。确保在使用Sheets
时永远不会使用Worksheets
。
Sheets
包含工作表和图表Worksheets
仅包含工作表示例Sheets(1).Range("A1")
如果是图表则会失败。