我有一个MAIN WORKBOOK,它创建了一个包含特定工作表和标题的新工作簿,它不会保存工作簿,因此它将是一个随机名称,如Book1或Book2。这部分是成功的。它接下来要做的是打开一个文件并将打开的文件的数据复制到创建的UNSAVED工作簿(" Book1"或者其他名称)
问题是我无法在源数据工作簿(即打开的文件)和未保存的工作簿之间切换窗口。我试过windows("工作簿名称")。激活但它只适用于特定名称。我需要激活未保存的工作簿。总之,我有3个打开的工作簿。
Sub CopyData()
Dim Newbook As Window
Dim wb As Workbook, wb2 As Workbook
Dim ws As Worksheet
Dim vFile As Variant
'Set source workbook
Set wb = ActiveWorkbook
'Open the target workbook
vFile = Application.GetOpenFilename("All-Files,*.xl**", _
1, "Select One File To Open", , False)
'if the user didn't select a file, exit sub
If TypeName(vFile) = "Boolean" Then Exit Sub
Workbooks.Open vFile
Set wb2 = ActiveWorkbook
Worksheets("Sheet1").Range("A3:A65536").Copy
Windows("Book1").Activate 'Part where it should open the "unsaved file" and copy it
wb.Worksheets("Prices").Range("A3").PasteSpecial (xlPasteValues) ' unsaved file
End Sub
答案 0 :(得分:2)
通过将函数$(function() {
$("#example").popover('show');
$("#example").on('click', function () {
$('#example').popover('destroy');
});
});
的结果赋给变量,可以获得对新打开的工作簿的引用。所以不是那两行:
Workbooks.Open
你需要把这一个:
Workbooks.Open vFile
Set wb2 = ActiveWorkbook
现在你有两个变量:
Set wb2 = Workbooks.Open(vFile)
指向您的原始工作簿,wb
指向新创建的工作簿。当引用范围时,您需要在开头放置适当的变量,即:
wb2
不再需要此行wb.Worksheets("Sheet1").Range("A3:A65536").Copy
,因为如果您通过变量引用工作簿,则无需激活它们即可复制&粘贴数据。
答案 1 :(得分:1)
你几乎就在那里,你只需要使用Workbooks
代替Windows
。
Workbooks("workbook name").Activate
有关Workbook
object的文档,请参阅MSDN。
编辑:最初误解了您的问题。 @Mielk现在已经回答了如何实现你所追求的目标。但是,为清楚起见,请参阅下面的答案。
不确定您是否知道未保存的工作簿将始终被称为“Book *”,但如果是,则可以使用此:
Sub workbookActivate()
Dim wb3 As Workbook, wkb As Workbook
For Each wkb In Workbooks
If Left(wkb.Name, 4) = "Book" Then
Set wb3 = wkb
Exit For
End If
Next wkb
wkb.Activate
End Sub
只是另一种选择。