簡體   English   中英

打開新工作簿 Excel 2016 VBA 后功能區無響應

[英]Unresponsive ribbon after opening new workbook Excel 2016 VBA

我在編程方面是個菜鳥,但是我已經能夠在 excel 中構建幾個有用的應用程序,這些應用程序可以自動執行我的一些日常任務。

目前,我在嘗試使用 Excel 2016 中的workbooks.open()打開新工作workbooks.open()時遇到了一個煩人的問題。

我制作了一個帶有調用用戶表單的按鈕的工作簿。 表單啟動后,用戶可以選擇下載和打開多種類型的 .xls 文件。 當用戶單擊表單的 OK 按鈕時,所有適當的函數都會被調用,選定的工作簿被打開,表單被卸載和隱藏。

但是,打開的最后一個工作簿的功能區(順便說一下,當前處於活動狀態的工作簿)沒有響應,解決此問題的唯一方法是在打開的窗口之間按 ALT+TAB。

似乎“焦點”仍然在帶有按鈕的初始工作簿上,因為如果我在卸載表單后調用Msgbox ,它就會出現在那里。 值得一提的是,盡管初始工作簿不是活動的,但會發生這種情況!

在做了一些實驗之后,我能夠通過在調用我的函數時禁用Application.ScreenUpdating來解決這個問題,然后在卸載表單之前重新啟用它。

但是,這僅在同時打開多個工作簿時才有效。 如果用戶選擇僅打開一個工作簿,則問題仍然存在。 我遇到了一個使用戶表單無模式的建議,這確實解決了問題,但會產生其他類型的不需要的行為。

復制問題的代碼的簡化版本如下:

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False 'solves the issue but only for multiple files - comment out to replicate the problem
If OptionButton1 Then
    Workbooks.Open ("http://www.admie.gr/fileadmin/user_upload/reports/DayAheadSchedulingUnitAvailabilities/20180602_DayAheadSchedulingUnitAvailabilities_01.xls")
Else
    Workbooks.Open ("http://www.admie.gr/fileadmin/user_upload/reports/DayAheadSchedulingUnitAvailabilities/20180603_DayAheadSchedulingUnitAvailabilities_01.xls")
    Workbooks.Open ("http://www.admie.gr/fileadmin/user_upload/reports/DayAheadSchedulingUnitAvailabilities/20180604_DayAheadSchedulingUnitAvailabilities_01.xls")
End If
Application.ScreenUpdating = True 'solves the issue but only for multiple files - comment out to replicate the problem
Unload UserForm1
UserForm1.Hide
MsgBox ActiveWorkbook.Name 'for debugging purposes - comment out to replicate the problem - the msgbox will be displayed on the workbook which called the userform, although it's not the active one
End Sub

Sub Button1_Click() 'calls the userform
UserForm1.OptionButton1.Value = True
Load UserForm1
UserForm1.Show vbModeless 'comment out to replicate the problem - solves the issue but creates unwanted behavior
End Sub

有沒有人處理過這個問題?

你有什么建議?

當我只打開 1 個工作簿時,我在股票 excel 上遇到了同樣的問題。 在 Workbooks.open 之后添加此功能區時,將再次啟用功能區:

    ThisWorkbook.Activate
    Workbooks("*openedWorkbookName*").Activate

順便說一句,在當前未激活的工作表中選擇單元格時,一些較舊的代碼會導致運行時錯誤。 這也有助於解決這個問題。

我知道這已經過去幾年了,但我認為這可以幫助某人。

我也遇到過這個問題。 我在某個地方找到了這個問題可以通過隱藏用戶表單 -before-open 工作表來解決的答案。

所以,只需像這樣重新排列命令。

Private Sub CommandButton1_Click()
UserForm1.Hide 'or Me.Hide
If OptionButton1 Then
    Workbooks.Open ("filename.xls")
Else
    Workbooks.Open ("filename1.xls")
    Workbooks.Open ("filename2.xls")
End If
Unload UserForm1 'if you still want it
End Sub

您是否在 Excel 上啟用了標准之外的任何加載項。 例如,我使用名為 ASAP 的實用程序產品,當我啟動我的 excel 時,觸發事件的可執行文件會相互覆蓋。 它會在我第一次打開 excel 時鎖定功能區,所以我每次打開第一個 excel 后都會創建一個新的 excel

我正在使用 Excel 宏來創建新工作簿並用數據填充它們 (Office 365)。

Public New_Wb As Workbook
Public New_Book_Name as String

Workbooks.Add
New_Book_Name = ActiveWorkbook.Name
Set New_Wb = ActiveWorkbook

我也遇到了宏完成后新工作簿將部分激活的問題。 我可以在工作簿單元格中工作,但功能區處於非活動狀態。 移開並移回新工作簿會激活功能區,但這很煩人。 我注意到在工作簿中右鍵單擊足以激活功能區。 奇怪,是的。 因此,我跟蹤代碼以在宏完成后強制執行鼠標右鍵單擊事件(如下所示)。 這是一個真正的混雜,但它發生得如此之快以至於不可見,並使功能區處於活動狀態。

Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Public Const MOUSEEVENTF_RIGHTUP As Long = &H10

...在工作簿填充后...

New_Wb.activate

mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0

mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM