銀河鉄道

【VBA】ユーザーフォームを半透明にしてシートの内容が見えるようにする|waiting-form

サムネイル
ユーザーフォーム半透明にする

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

こういう感じ

全部かくれちゃうと不安なので半透明にしたい

フォームモジュールに記述

「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

タイトルバーを非表示にする方法

タイトルバーは、こちらの方法で非表示に

関連記事

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。

記事一覧