使用VBA打开Excel工作簿时如何使打开的工作簿成为活动窗口?

时间:2016-05-04 20:38:11

标签: excel excel-vba focus vba

我正在使用一个调用第二个表单的xlsm文件表单,要求用户选择要打开的工作簿。然后,VBA代码将打开该工作文件。但是,我发现在Office 2016中,该文件在原始xlsm文件后面打开。也就是说,它不会成为活动窗口。我可以使用Alt + Tab转到打开的文件,但在我按Alt + Tab激活原始xlsm文件之前,该文件不会与我的击键或鼠标点击进行交互。然后,当我响应VBA打开的文件时,我可以与它进行交互。也就是说,VBA打开的文件在我使用具有VBA代码的工作文件触及后退之前不会变为活动状态。我已经尝试了一系列的activeworkbooks,application.activewindow命令来激活打开的工作簿无济于事。

以下是我使用的代码:

Private Sub btn_select_Click()
' User clicks on select. If a subcategory is selected open the file and stop program. If not repopulate sub-category
    If IsNull(lst_subcategories) Or lst_subcategories = "" Then
        lst_subcategories.Clear
        Call populate_data
    Else   ' open file and unload form (End)
        If lst_datacategories <> "Tourism" Then
            str_filetoopen = "I:\Bureau-Work\Data System\" & lst_datacategories & "\" & lst_subcategories & ".xlsx"    ' May need to be F: drive
        Else
            str_filetoopen = "I:\Bureau-Work\Data System\" & lst_subcategories & "\" & lst_subcategories & ".xlsx"    ' May need to be F: drive
        End If

        On Error Resume Next      ' drive or file may not be available.  If so error and retain from
          Set wb = Workbooks.Open(str_filetoopen)
          If wb Is Nothing Then
            MsgBox "I: Drive or Retrieve File is Not Accessible"
            GoTo handle    ' retains frm_editData
          End If
          Workbooks(wb).Activate
          ActiveWindow.Visible = True
        End     'exit all macros and forms once successfully loading file
    End If
handle:
End Sub

&#34;工作簿(wb).Activate&#34;和&#34; Activewindow.visible = True&#34;命令试图将新工作簿窗口设置为活动窗口。据我所知,这不会发生在Office 2013中,但可能是Office 2016特有的。

2 个答案:

答案 0 :(得分:1)

试试:

wb.activate

为我工作

答案 1 :(得分:0)

尝试将其添加到VBA脚本的末尾:

Application.SendKeys ("%{TAB}")

它会尝试使用Alt-Tab切换窗口,然后希望这将解决您的问题。