切换3个工作簿

时间:2015-08-13 11:30:39

标签: excel vba excel-vba

我有一个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

2 个答案:

答案 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

只是另一种选择。