【问题标题】:Stay in the active workbook after opening other workbooks打开其他工作簿后留在活动工作簿中
【发布时间】:2018-08-25 09:21:57
【问题描述】:

我正在尝试打开另外两个 Excel 工作簿以获取数据以通过宏进行计算。我有一个可以打开这些文件的工作代码。

Dim wbCount As Integer
Application.ScreenUpdating = False
For wbCount = 1 To 2
Workbooks.Open Filename:=ThisWorkbook.Path & "\Installation Sheet " & wbCount & ".xlsm", UpdateLinks:=False
Next wbCount
ThisWorkbook.Activate
Application.ScreenUpdating = True

其他文件名为“安装表 1”和“安装表 2”。运行此代码后,我最终会显示“安装表 1”而不是我的活动工作簿。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    将您的ActiveWorkbook 放入适当位置的变量中,然后使用该变量返回。 ThisWorkbook 是带有代码的那个。所以请确定你的意思是ActiveWorkbook 还是ThisWorkbook,或者ThisWorkbook 是当时的ActiveWorkbook。在这种情况下,您可以简单地Set wb = ThisWorkbook

    Dim wb As Workbook
    Set wb = ActiveWorkbook
    'Set wb = ThisWorkbook   '<== If you want the workbook containing the code
    'Other code
    wb.Activate
    

    【讨论】:

    • 非常感谢您的建议。我尝试了您的解决方案,但仍然得到相同的结果。这是更新的代码。 @QHarr
    • 是你想要的代码放在最后的工作簿吗?
    • 是的。我需要将编写此宏的工作簿放在前面。
    • 设置 wb =ThisWorkbook 。在你的循环结束时,然后把 wb.Activate 放在前面。
    • 很高兴能帮上忙。
    【解决方案2】:

    您必须将工作簿引用放入变量中,然后使用这些变量您有两个选择:关闭新打开的工作簿,因此只有原始工作簿保持打开状态或使用 Activate 方法将原始工作簿置于前面。

    示例代码:

    Sub OpeningWb()
        Dim wb As Workbook, currentWb As Workbook
        Set currentWb = ThisWorkbook
        Set wb = Workbooks.Open("your path here")
        ' if you want to close opened workbook
        'wb.Close
        ' if you want to bring to front original workbook
        currentWb.Activate
    End Sub
    

    或者,您可以执行以下操作:

    Dim wbToDisplay As Workbook
    Set wbToDisdplay = Workbooks("workbook name here")
    wbToDisplay.Activate
    

    【讨论】:

    • 感谢您抽出宝贵时间。我尝试了你的建议,但我仍然得到相同的结果。以下是修改后的代码:
    • @Michal Turczyn 您的原始解决方案现在可以正常工作,但是在我删除了 SreenUpdate 语句之后。你能告诉我原因吗?我关闭了屏幕更新,因为我不想让我的屏幕闪烁。
    • @ShashankBanerjee 它不会影响我的计算机上的行为。如果我使用ScreenUpdating = False,它仍然可以正常工作。
    • Turczyn 非常感谢您的回复。我将对此进行更多研究。感谢您的帮助:)
    • @ShashankBanerjee 如果我的回答对您有所帮助,您应该接受它并选择支持。
    【解决方案3】:

    上述解决方案对我不起作用,因为在显示第二个工作簿之前触发了 activate 方法,所以我总是激活第二个工作簿。我的解决方法是在调用 Activate 方法之前等待几秒钟:

    Dim t: t = Timer
    While Timer < t + 2 'wait for 2 seconds
        DoEvents
    Wend
    ThisWorkbook.Activate
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 2014-09-12
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多