
嵌入原理是設定將對話框設定為父視窗:
m_excelHwnd = ::FindWindow(NULL, m_exlApp.get_Caption());
::SetParent(m_excelHwnd,this->m_hWnd);
一開始本機測驗能正常運行,Excel有選單欄;運行一段時間發現選單欄消失,更換換其他機器測驗時也發現Excel選單欄消失,Excel版本是2007。請教如何解決Excel選單欄消失的詭異現象。
uj5u.com熱心網友回復:
全部顯示CommandBars 集合物件
請參閱 屬性 方法 事件 特性
CommandBars (CommandBar)
CommandBarControls (CommandBarControl)
CommandBarButton
CommandBarComboBox
CommandBarPopup
一個代表容器應用程式中工具列的 CommandBar 物件集合。
使用 CommandBars 集合
用 CommandBars 屬性可回傳 CommandBars 集合。以下示例在 Immediate 視窗顯示每個選單欄和工具列的名稱和本地名稱,并顯示一個數值以表明該選單欄或工具列是否出現在螢屏上。
For Each cbar in CommandBars
Debug.Print cbar.Name, cbar.NameLocal, cbar.Visible
Next
用 Add 方法可在集合中添加一個新的命令欄。以下示例創建一個自定義工具列“Custom1”并將其作為浮動工具列顯示。
Set cbar1 = CommandBars.Add(Name:="Custom1", Position:=msoBarFloating)
cbar1.Visible = True
用 CommandBars(index) 可回傳一個 CommandBar 物件;此處 index 是該命令欄的名稱或索引號。以下示例將工具列“Custom1”固定在應用程式視窗的底部。
CommandBars("Custom1").Position = msoBarBottom
注意 可用名稱或索引號指定位于容器應用程式的有效選單欄和工具列串列中的選單欄或工具列,但只能用名稱指定選單、快捷選單或子選單(所有這些內容均可由 CommandBar 物件表示)。
如果兩個或兩個以上的自定義選單或子選單具有相同的名稱,那么 CommandBars(index) 回傳第一個具有該名稱的選單。為確保回傳正確的選單或子選單,可找到顯示該選單的彈出式控制元件,然后對該彈出式控制元件使用 CommandBar 屬性以回傳代表該選單的命令欄。
uj5u.com熱心網友回復:
CommandBars 屬性請參閱 應用于 示例 特性
回傳 CommandBars 物件,該物件代表 Microsoft Excel 命令欄。只讀。
說明
同 Application 物件一起使用。本屬性回傳所有對該應用程式有效的內置及自定義命令欄。
如果作業薄嵌入在另一個應用程式中并且用戶雙擊激活了該作業薄,使用本屬性及 Workbook 物件可以回傳 Microsoft Excel 的所有在該應用程式中有效的命令欄集合。其他任何時候與 Workbook 物件共同使用本屬性將回傳 Nothing。
沒有程式化的方法可用來回傳附屬于作業薄的命令欄集合。
示例
本示例洗掉所有不可見的自定義命令欄。
For Each bar In Application.CommandBars
If Not bar.BuiltIn And Not bar.Visible Then bar.Delete
Next
uj5u.com熱心網友回復:
補充一下自己的新發現:內嵌的Excel在獲取焦點后,如果按下Ctrl+F2,會出現列印預覽界面,再按下ESC退出,則選單欄恢復。uj5u.com熱心網友回復:
Sub aaa()
Dim aa, bb As Boolean
aa = True
bb = False
Application.CommandBars("ply").Enabled = aa
'右鍵點作業表標簽是否可用
Application.CommandBars("cell").Enabled = aa
'右鍵點單元格是否可用
Application.CommandBars("toolbar list").Enabled = aa
'右鍵點工具列及“視圖”-“工具列”是否可用
Application.CommandBars("autocalculate").Enabled = aa
'右鍵點狀態欄是否可用
Application.CommandBars("worksheet menu bar").Enabled = aa
Application.CommandBars(1).Enabled = aa
'以上兩句的作用都是把選單取消
Application.CommandBars(2).Enabled = aa
'暫時未知
Application.CommandBars(3).Enabled = aa
'常用工具列是否可用
'Application.CommandBars(3).Controls(3).Enabled = aa
'使常用工具列中第三個“保存”是否可用
Application.CommandBars(4).Enabled = aa
'格式工具列是否可用
Application.CommandBars(5).Enabled = aa
'暫時未知
Application.CommandBars(1).Enabled = aa
'恢復選單可用
Application.CommandBars(1).Controls(1).Enabled = aa
'使選單中的“檔案”是否可用
'Application.CommandBars("file").Controls("頁面設定(&U)...").Enabled = aa
'選單中的“檔案”中的“頁面設定”是否可用
Application.CommandBars(1).Controls(4).Enabled = aa
'選單中的第四個“插入”是否可用
Application.CommandBars(1).Controls(4).Caption = "victor"
'更改名稱
Application.CommandBars(1).Reset
'恢復選單
Application.DisplayFormulaBar = aa
'編輯欄是否顯示
Application.DisplayStatusBar = aa
'狀態欄是否顯示
ActiveWindow.DisplayHeadings = aa
'行號列標是否顯示
ActiveWindow.DisplayWorkbookTabs = aa
'作業表標簽是否顯示
ActiveWindow.DisplayHorizontalScrollBar = aa
'水平滾動條是否顯示
ActiveWindow.DisplayVerticalScrollBar = aa
'垂直滾動條是否顯示
End Sub
從網上找到的恢復腳本,Alt+F11調出代碼后粘貼執行仍然無效。
uj5u.com熱心網友回復:
請大神指點~~~uj5u.com熱心網友回復:
執行完企圖恢復選單欄的腳本之后,模擬按F5鍵重繪一下當前視窗?PostMessage(wnd, WM_KEYDOWN, VK_F5, 0);
uj5u.com熱心網友回復:
執行腳本是無效的,根本無法恢復選單欄。目前唯一有效的方法是ctrl+f2,然后esc退出,但是這樣又引出很多新問題,比如excel子視窗必須先獲取焦點,發訊息不一定百分百進入列印預覽界面,進入預覽界面也不一定保證esc退出。
uj5u.com熱心網友回復:
請問大神,你這個嵌入能分享詳細一點嗎,我最近也在做dialog上面顯示excel,就是卡在了嵌入這一塊。求指導,我的QQ:387841812,麻煩您如果不忙的話能知道一下,謝謝,這個問題困擾了我一個星期了。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/42125.html
標籤:界面
上一篇:vm安裝虛擬機
