質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

Q&A

解決済

1回答

4171閲覧

対象のブックのタイトルバーを非表示にしたい

saines

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

0グッド

0クリップ

投稿2021/01/08 10:11

前提・実現したいこと

複数ブックを表示しているという前提で、対象のブックに対してタイトルバーを非表示にする処理をVBAにて作成しています。
エクセルの機能だけでは実現できないと考え、WindowsAPIを用いております。

発生している問題・エラーメッセージ

コード自体は記述できており内容も問題ないと考えているのですが、処理を実行しても画面上は特に変化は無く、タイトルバーの非表示が実現できません。
基本的な処理の流れとしては、対象のブックのハンドル値を取得、SetWindowLongにてウインドウ変更、SetWindowPosにて反映といった形になります。
以下、ソースコードになります。
宣言は全て記載、処理は該当の部分のみを記載しました。
ウインドウ名を渡して処理を呼び出しています。
当方はWindowsAPIを最近利用し始めたばかりのため不慣れであり、もし問題があると思われる箇所がありましたらご指摘頂けたらと思います。

該当のソースコード

VBA

1'最前面 2Private Declare Function GetForegroundWindow Lib "user32" () As Long 3Private Declare Function SetWindowPos Lib "user32" _ 4(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _ 5 ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, _ 6 ByVal wFlags As Long) As Long 7 8Private Const HWND_TOP = 0 9Private Const HWND_TOPMOST As Long = -1 10Private Const SWP_NOSIZE As Long = &H1& 11Private Const SWP_NOMOVE As Long = &H2& 12Private Const SWP_FRAMECHANGED = &H20& 13 14 15'フォーム背景透明化 16Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ 17 (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 18Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _ 19 (ByVal hwnd As Long, ByVal nIndex As Long) As Long 20Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _ 21 (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 22Private Declare Function SetLayeredWindowAttributes Lib "user32" _ 23 (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Long, ByVal dwFlags As Long) As Long 24 25Const GWL_EXSTYLE = (-20) 26Const WS_EX_LAYERED = &H80000 27Const LWA_COLORKEY = 1& 28Const LWA_ALPHAKEY = 2& 29 30 31'フォームタイトルバー非表示 32#If VBA7 And Win64 Then 33Private Declare PtrSafe Function WindowFromObject Lib "oleacc" Alias "WindowFromAccessibleObject" _ 34 (ByVal pacc As Object, phwnd As LongPtr) As LongPtr 35Private Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hwnd As LongPtr) As Long 36#Else 37Private Declare Function WindowFromObject Lib "oleacc" Alias "WindowFromAccessibleObject" _ 38 (ByVal pacc As Object, phwnd As Long) As Long 39Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long 40#End If 41 42Const GWL_STYLE = (-16&) 43Const WS_CAPTION = &HC00000 44Const WS_EX_DLGMODALFRAME = &H1& 45 46Sub ウインドウ設定(ウインドウ As String) 47 48 Dim hwnd As Long 49 50 hwnd = FindWindow("XLMAIN", ウインドウ) 51 Call SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) And Not WS_CAPTION) 52 Call SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_FRAMECHANGED) 53 54End Sub 55

試したこと

ハンドル値が正常に取得できているかは検証済みです。
問題があるとすればそれ以降の処理になるかと思います。

補足情報(FW/ツールのバージョンなど)

Excel2016 32ビット バージョン2011

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

初期化処理を見直したら機能しました。
コード自体には問題無かったようです。

投稿2021/01/09 09:08

saines

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問