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

我正在使用一个xlsm文件窗体调用第二个窗体来要求用户select打开哪个工作簿。 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 

“Workbooks(wb).Activate”和“Activewindow.visible = True”命令尝试将新工作簿窗口设置为活动窗口。 就我所知,这在Office 2013中不会发生,但可能是Office 2016的特有function。

你试一试:

 wb.activate 

为我工作

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

 Application.SendKeys ("%{TAB}") 

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