Access2013のコマンドボタンを消す方法

このQ&Aのポイント
  • 会社でAccessアプリケーションを作っています。タイトルバーにある閉じるなどのコマンドボタンをモジュールで消していましたが、Access2013では同じ方法が使えません。
  • Access2003で使用していたコードでは、タイトルバーにあるコマンドボタンを非表示にすることができましたが、Access2013ではこの方法が機能しません。
  • Access2013でコマンドボタンを非表示にする方法をご存知の方がいらっしゃいましたら、教えていただきたいです。
回答を見る
  • ベストアンサー

Access2013のコマンドボタンを消す方法

会社でAccessアプリケーションを作っています。 これまで、Access2003で作っていて、タイトルバーにある閉じるなどのコマンドボタンをモジュールで消していました。モジュールは、下記のような物です。 この度、会社のPCの交換で、Access2013にしたので、古いAccessをコンバートしたいと思いまして、不具合をつぶしているのですが、タイトルバーにあるコマンドボタンを非表示にすることができなくて悩んでいます。 どなたか、Access2013での方法を知っていましたら教えてください。 よろしくお願いします。 Access2003で使っているコードの一部です。 Public Function AccessTitleBar() Const GWL_STYLE = (-16) Const WS_SYSMENU = &H80000 Dim lngRetVal As Long lngRetVal = GetClassLongPtr(hWndAccessApp, GWL_STYLE) lngRetVal = SetWindowLongPt(hWndAccessApp, GWL_STYLE, lngRetVal - WS_SYSMENU) lngRetVal = SetWindowPos(hWndAccessApp, 0, 0, 0, 0, 0, _ SWP_DRAWFRAME Or SWP_NOZORDER Or SWP_NOMOVE Or SWP_NOSIZE) End Function

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

下記のコードで消せています。 Option Compare Database Option Explicit Private Declare Function GetWindowLong Lib "user32" _ Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _ (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Const GWL_STYLE = (-16) Private Const WS_SYSMENU = &H80000 Public Sub SetAccWinStyle() Dim WStyle As Long Dim hWnd As Long DoCmd.ShowToolbar "Ribbon", acToolbarNo hWnd = Application.hWndAccessApp WStyle = GetWindowLong(hWnd, GWL_STYLE) WStyle = WStyle And Not WS_SYSMENU SetWindowLong hWnd, GWL_STYLE, WStyle End Sub リボンが表示されていると消せないようですので、 DoCmd.ShowToolbar "Ribbon", acToolbarNo でリボンを非表示にするのがキモです。 リボンを表示したまま消す方法はわかりません。

panacon
質問者

お礼

hatena1989さん 回答ありがとうございます。 このコードをモジュールに貼り付けて、SetAccWinStyle()を実行したら上手くいきました。ただ、起動時にこれを実行しようとして、AutoExecにプロシージャの実行を選択して、プロシージャ名をSetAccWinStyle()にしたら、見つけられない関数としてけられてしまいました。 お手間ですみませんが、起動時の設定の仕方まで教えていただけませんでしょうか。 よろしくお願いします。

関連するQ&A

  • WindowsAPI(GetWindowLongA)について質問です。

    WindowsAPI(GetWindowLongA)について質問です。 以下コードを実行すると、ウィンドウにスクロールバーが表示されてしまいます。 実行はVBAでAccessのフォームを呼び出しています。 フォーム自体はディスプレイ幅より明らかに小さいフォームサイズです。 SetWindowLongAの引数指定が間違っているのでしょうか? また、スクロールバーを表示させない方法はありますでしょうか? アドバイスよろしくお願いいたします。 'Windows属性の取得 Public Declare Function GetClassLongPtr Lib "user32" Alias "GetWindowLongA" ( _ ByVal hWnd As Long, ByVal nIndex As Long) As Long 'Windows属性の変更 Public Declare Function SetWindowLongPt Lib "user32" Alias "SetWindowLongA" ( _ ByVal hWnd As Long, ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Public Sub MenuBarsReset() Const GWL_STYLE = (-16) Const WS_SYSMENU = &H80000 Dim lngRetVal As Long lngRetVal = GetClassLongPtr(hWndAccessApp, GWL_STYLE) lngRetVal = SetWindowLongPt(hWndAccessApp, GWL_STYLE, lngRetVal - WS_SYSMENU) End Sub

  • VBA ユーザーフォームの×ボタン制御の不具合

    PowerPoint VBAで複数のユーザーフォームからなるVBAマクロを作成しました。 フォーム内の「次へ」「前へ」ボタンでのみ、マクロの実行制御をしているので、途中で右上の×を押されると、想定外エラーが発生します。 そこで、一番下に貼りつけたようなコードを全てのフォームに挿入することで、右上の×が表示されないようにしました。 あくまでフォームにしかコードは埋め込んでいません。 (標準モジュール、クラスには入ってません) ですが、極稀に、「フォームの右上×」ではなく、「PowerPointの右上×」が非表示になってしまう現象が発生します。 いろいろやるうちに再現はするのですが、厳密な再現手順がよくわかりません。 状況と下記ソースから、どこらへんに原因がありそうかアドバイス頂けないでしょうか? 全コードは出せない部分が多いのですが、アドバイスにあたり必要なコードがあれば、別途貼らせて頂きます。 Private Const GWL_STYLE = (-16) Private Const WS_SYSMENU = &H80000 ' ウィンドウに関する情報を返す Private Declare Function GetWindowLong Lib "USER32.dll" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long ' ウィンドウの属性を変更 Private Declare Function SetWindowLong Lib "USER32.dll" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long ' Activeなウィンドウのハンドルを取得 Private Declare Function GetActiveWindow Lib "USER32.dll" () As Long ' メニューバーを再描画 Private Declare Function DrawMenuBar Lib "USER32.dll" (ByVal hWnd As Long) As Long ' フォームアクティブ時処理 Private Sub UserForm_Activate() Dim hWnd As Long Dim Wnd_STYLE As Long hWnd = GetActiveWindow() Wnd_STYLE = GetWindowLong(hWnd, GWL_STYLE) Wnd_STYLE = Wnd_STYLE And (Not WS_SYSMENU) SetWindowLong hWnd, GWL_STYLE, Wnd_STYLE DrawMenuBar hWnd End Sub

  • ExcelVBAでフォームのタイトルバーで右クリックした場合などに閉じるボタンが有効化されないようにするコード

    Excelのプログラムで、最小化ボタンを有効にし、閉じるボタンを無効にする質問をしたんですが、うまくいったと思ったのですがフォームが開き、タイトルバーで右クリックした場合などは閉じるボタンが有効化されてしまうのでこれを無効のままにするコードを教えてください。 作ったプログラムは以下の通りです。 標準モジュール 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 Declare Function GetSystemMenu Lib "user32.dll" _ (ByVal hWnd As Long, ByVal bRevert As Long) As Long Public Declare Function EnableMenuItem Lib "user32" _ (ByVal hMenu As Long, ByVal wIDEnableItem As Long, ByVal wEnable As Long) As Long Public Const MF_DISABLED = &H2& Public Const GWL_STYLE = (-16) Public Const WS_MINIMIZEBOX = &H20000 Public Const MF_BYCOMMAND = &H0& Public Const SC_CLOSE = &HF060& Dim hSysMenu As Long UserForm_Initializeプロシージャ Dim fRet As Long Dim hWnd As Long Dim fStyle As Long hWnd = FindWindow("ThunderDFrame", "UserForm1") fStyle = GetWindowLong(hWnd, GWL_STYLE) fStyle = (fStyle Or WS_THICKFRAME Or WS_MINIMIZEBOX) fRet = SetWindowLong(hWnd, GWL_STYLE, fStyle) hSysMenu = GetSystemMenu(hWnd, 0) EnableMenuItem hSysMenu, SC_CLOSE, MF_BYCOMMAND Or MF_DISABLED fRet = DrawMenuBar(hWnd) 回答よろしくお願いします。

  • 最大化時のフルスクリーン

    いつもお世話になっております。 VS2005 を使ってWindowsアプリケーションの実装を行っています。 最大化時にフルスクリーンにしたくプログラムを作成しているのですが、 WndProc内で下記のプログラムを実行し、 最大化アイコンをクリックするとバグ?が起きてしまいます。 -------------------------------------------------- case WM_SIZE:   cxClient = LOWORD(lParam);   cyClient = HIWORD(lParam);   if(wParam == SIZE_MAXIMIZED){ //最大化されたら     ShowWindow(hWnd, SW_SHOWNORMAL); //(1)ウィンドウを元のサイズに戻す     //(2)アプリケーションのウィンドウのフレームを「なし」にする     GetWindowLong(hWnd, GWL_STYLE); //ウインドウ・スタイルの取得     SetWindowLong(hWnd, GWL_STYLE, WS_POPUP); //ウインドウ・スタイルの設定     SetWindowPos(hWnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER);     ShowWindow(hWnd, SW_MAXIMIZE); //(3)ウィンドウ最大化   } return 0; -------------------------------------------------- 実行したアプリケーションの右上の最大化ボタンを押すと、 見た感じではif文の中を繰り返し行っているような・・・ 元のサイズに戻って最大化になってを数秒繰り返して 最後にペイントして停止します。(高速なため確かではありません) 上記プログラムをどう直したらよいのでしょう。 ご教授お願いいたします。

  • アクセス2010本体フォーム固定

    アクセス本体のフォームの大きさを固定したく、下記サイトを参考にし http://hatenachips.blog34.fc2.com/blog-entry-2.html SetWindowPos hWnd, HWND_TOP, 0, 0, 800, 600, SWP_NOMOVE 、としました。 これを解除してフォームの大きさを変更できるようにするには、どうしたらよろしいでしょうか?

  • 「コンパイルエラー End Subが必要です。」

    Access2016でファイルを作成しているのですが、下記のVBAを実行しようとすると、「コンパイルエラー End Subが必要です。」とエラーメッセージが返ってきてしまいます。 構文の修正が必要であるとお気づきであれば、その箇所を教えていただけないでしょうか。初歩的な質問で恥ずかしい限りですが、何卒よろしくお願い致します。 Option Compare Database Option Explicit Public Declare PtrSafe Function SetWindowPos Lib "user32" _ (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _ ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _ ByVal fuFlags As Long) As Long Public Declare PtrSafe Function GetSystemMenu Lib "user32" _ (ByVal hWnd As Long, ByVal fRever As Long) As Long Public Declare PtrSafe Function RemoveMenu Lib "user32" _ (ByVal hMenu As Long, ByVal uItem As Long, ByVal fuFlags As Long) As Long Public Const SWP_NOMOVE = &H2 Public Const SWP_NOSIZE = &H1 Public Const HWND_TOP = &H0 Public Const SC_SIZE = &HF000 Public Const SC_MAXIMIZE = &HF030 Public Const SC_CLOSE = &HF060 Public Const SC_RESTORE = &HF120 Public Const MF_BYCOMMAND = &H0& Public Sub test() Private Sub Form_Open(Cancel As Integer) Dim hWnd As Long hWnd = Application.hWndAccessApp SetWindowPos hWnd, HWND_TOP, 0, 0, 800, 600, SWP_NOMOVE hWnd = GetSystemMenu(hWnd, 0) RemoveMenu hWnd, SC_SIZE, MF_BYCOMMAND End Sub

  • AccessからExcelのコマンドボタンイベント

    Access2003 WinXP です。宜しくお願いします。 AccessのVBAでExcelファイルをコピーしたり開いたり テキストボックスの内容を書き換えたりしています。 Excelにてコントロールツールボックスから作成したコマンドボタンがあるのですが、このボタンのクリックイベントを AccessのVBAから実行させる方法を探しています。 ちなみに訳あって標準モジュールに書かれているわけではないので マクロを呼び出す方法は不可でした;; 標準モジュールに移すのは無しの方向で どなたか分かる方いらっしゃいましたらお願いします。

  • access2002 コマンドボタンウィザードでフリーズ

    access2002を使っています。 新しいPCにインストールして半年つかっていましたが、今日、コマンドボタンを作る際にフリーズしてしまいました。 どうやら新しいPCにインストールしてからコマンドボタンを作る機会がなかったのできづかなかったようです。 新PCはwindowsVISTAでPCにもともとoffice2007が入っていまいたが、 accessが入っていなかったので、 所有していたofficeXPのaccessだけインストールしたという環境です。 この環境がまずいのでしょうか? フリーズの状況は、コマンドボタンを配置する時にウィザードが起動し、れーコードの移動やらレコードの操作を選べるようになっていて、それを一つでもクリックすると100%フリーズします。 フリーズ時に出るメッセージ//////////////////////// microsoft windows Microsoft Accessは動作を停止しました。 問題の詳細 問題のイベント名 APPCRASH アプリケーション名 MSACCESS.EXE ・ ・ ・ 障害モジュールの名前 StackHash_3842 //////////////////////////////////////////////// コマンドボタンのウィザード以外では今のところフリーズはなく動作しています。 別のデータベースでも試しましたが同様にフリーズします。 それ以外は機能 よろしくお願いいたします。

  • SetWindowPosについて

    こんにちは。以前のスレッドを何件か拝見して、私の事象がないようなので、投稿します。背面フォーム内の処理をタイマ割込みやループなどで処理しつつ、その前面でフォームを表示する場合、SetWindowPosのAPIが有効というところまでは分かっているのですが、私の場合、割り込みによるビットのON/OFFをしたいと思ってロジックを組んでいるのですが・・・ どうしてもモーダルフォームを前面表示したときと同じように、背面での処理が走ってくれません・・・ ロジックですが、前面フォームのイベントを sub Form_Load() SetWindowPos(frm_ctrl.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) end sub のように行っています。アンロード時にハンドルの設定は解除してあります。 タイマ割込みの処理が他者作成のため、目下処理が不明なのですが、こちらの方もAPIを使用しているかもしれません。 情報が少なくて恐縮ですが、この内容で解決の手掛かりとなる事をご教授頂けると幸いです。

  • WindowsAPIの、ウインドウの表示非表示

    WindowsAPIのCreateWindowEx関数で作った 例えば第一引数が WS_EX_TOOLWINDOW|WS_EX_TOPMOST で第四引数が WS_SYSMENU | WS_VSCROLL | WS_SIZEBOX のウインドウを、何かのアクションがあったときいったん非表示にしてから、また何かのアクションがあった時に表示させるには、どのような物を使うのがベストなのでしょうか? プロシージャ内(HWNDはhw)で一例として(…?)試しに以下だけのものでやってみると long lStyle = GetWindowLong(hw, GWL_STYLE); lStyle = ~WS_VISIBLE; SetWindowLong(hw, GWL_STYLE, lStyle); 確かに非表示扱いにはなるようなのですが、これだけではスクリーンは再描画されず、再描画されるには人為的に別ウインドウを移動したりしないといけません。 おそらく「何かによって再描画させられれば」出来ると思うのですが それはどうすれば実現できるのでしょうか? また、これより もっと「こっちの方がいい」といった方法はありますでしょうか?

専門家に質問してみよう