【VBA】ユーザーフォームを半透明にしてシートの内容が見えるようにする|waiting-form
作成日:2022-11-02
更新日:2022-12-07

シートの内容が隠れないように、フォームを半透明にします

こういう感じ


全部かくれちゃうと不安なので半透明にしたい
フォームモジュールに記述

「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
      編集後記:
      この記事の内容がベストではないかもしれません。