【VBA】ユーザーフォームを半透明にしてシートの内容が見えるようにする|waiting-form
記事更新日:2022-11-02
シートの内容が隠れないように、フォームを半透明にします
こういう感じ
全部かくれちゃうと不安なので半透明にしたい
フォームモジュールに記述
「myAlpha = 160」の数値を変えると透明度が変わる
Option Explicit
Private Declare PtrSafe Function GetParent _
Lib "user32" _
(ByVal hWnd As Long) As Long
Private Declare PtrSafe Function GetWindowLong _
Lib "user32" Alias "GetWindowLongA" ( _
ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare PtrSafe Sub SetWindowLong _
Lib "user32" Alias "SetWindowLongA" ( _
ByVal hWnd As Long, ByVal nIndex As Long _
, ByVal dwNewLong As Long)
Private Declare PtrSafe Sub SetLayeredWindowAttributes _
Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long _
, ByVal bAlpha As Long, ByVal dwFlags As Long)
Private Declare PtrSafe Sub DrawMenuBar Lib "user32" (ByVal hWnd As Long)
Private Const GWL_EXSTYLE As Long = -20&
Private Const WS_EX_LAYERED As Long = &H80000
Private Const LWA_ALPHA As Long = &H2&
'マクロ実行中の「しばらくお待ちください」のユーザーフォーム
Private Sub UserForm_Initialize()
kFormNonCaption Me, True
Dim myFrame As MSForms.control
Dim myHwnd As Long
Dim myWindowLong As Long
Dim myAlpha As Long
myAlpha = 160 '☆☆透明度(0~255の整数値、0で透明)
Set myFrame = Me.Controls.Add("Forms.Frame.1")
myHwnd = GetParent(GetParent(myFrame.[_GethWnd]))
Me.Controls.Remove myFrame.Name
Set myFrame = Nothing
myWindowLong = GetWindowLong(myHwnd, GWL_EXSTYLE)
myWindowLong = myWindowLong Or WS_EX_LAYERED
SetWindowLong myHwnd, GWL_EXSTYLE, myWindowLong
SetLayeredWindowAttributes myHwnd, 0&, myAlpha, LWA_ALPHA
DrawMenuBar myHwnd '念のため
End Sub
'ユーザーフォームをマウスでつかめるようにするための設定
Private Sub Frm_waiting_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
FormDrag Me, Button
End Sub
'Labelをマウスでつかめるようにするための設定
Private Sub Labe_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
FormDrag Me, Button
End Sub
標準モジュールに記述
Repaint が必要
Public Sub StartWaitingForm(ByVal form As Object)
With form
.Show vbModeless
.Repaint '再描画
End With
End Sub
タイトルバーを非表示にする方法
タイトルバーは、こちらの方法で非表示に
関連記事
2022-11-02
編集後記:
この記事の内容がベストではないかもしれません。