タイトル : Excelの最大化・最小化ボタン 投稿日 : 2010/03/17(Wed) 11:59 投稿者 : はる
いつも参考にさせていただいてます。 今回VB.netからExcelを制御するシステムを作っています。 VB.NET2008です。 Excelはレイトバインディングで制御します。 そこでCreateObjectしたExcelの最大化、最小化ボタンを非表示にしたいのですが、 WindowsAPIを使用するサンプルを見つけたので実装してみたところ 非表示になりません。 以下コード 'APIの宣言 'ウィンドウハンドルを取得する関数 Public Declare Function FindWindow Lib "user32" _ Alias "FindWindowA" (ByVal lpClassName As String _ , ByVal lpWindowName As String) As Long 'ウィンドウに関する情報を返す関数 Public Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" (ByVal hWnd As Long _ , ByVal nIndex As Long) As Long 'ウィンドウの属性を変更する関数 Public Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" (ByVal hWnd As Long _ , ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 'メニューバーを描画する関数 Public Declare Function DrawMenuBar Lib "user32" _ (ByVal hWnd As Long) As Long '最大化ボタン Public Const WS_MAXIMIZEBOX As Long = &H10000 '最小化ボタン Public Const WS_MINIMIZEBOX As Long = &H20000 'スタイルを取得する定数 Public Const GWL_STYLE As Long = -16& '非表示用のコード Sub BoxHide() Dim hWnd As Long Dim lngWstyle As Long 'Excelのハンドル hWnd = FindWindow("XLMAIN", xlApp.Caption) '最小化・最大化ボタンの消去 lngWstyle = GetWindowLong(hWnd, GWL_STYLE) SetWindowLong(hWnd, GWL_STYLE, lngWstyle _ And (Not WS_MAXIMIZEBOX) And (Not WS_MINIMIZEBOX)) 'メニュー表示し直し DrawMenuBar(hWnd) End Sub 上記のメソッドを Dim xlApp as Object = CreateObject("Excel.Application") Dim xlBooks as Object = xlApp.Workbooks '既存のファイルを開く場合 Dim xlBook as Object = xlBooks.Open(xlFilePath) Dim xlSheets as Object = xlBook.Worksheets Dim xlSheet as Object = xlSheets.Item(1) xlApp.WindowState = xlNormal xlApp.Left = Me.Left xlApp.Top = (Me.Top + Me.Height) * 0.75 xlApp.Width = Me.Width * 0.75 xlApp.Visible = True 'Excelを表示(必ずとも表示しなくてもよい) BoxHide() と一番最後に呼び出しています。 Excelのウィンドウハンドルにも値が入ってきているのですが、 表示されたExcelには最大化、最小化ボタンがついたままです。 本当にやりたいことは最大化、最小化ボタンの非表示ではなく Excelのウィンドウのサイズをユーザーが変更できないようにしたいのですが、 その方法が見つからず、とりあえず最大化、最小化の非表示だけでもと思っています。 一番いいのはサイズ固定、またはウィンドウのサイズが変更されたイベントを拾って サイズを戻すことなのですが。。 Excelの中のActiveWindowでは求めていることができたのですが、 Excelそのもののウィンドウがどうにもできない状態です。 ぜひご指示、ご指摘お願いいたします。 |