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

[VBA]Convert stringto Date 【VBA】文字列を日付型に変える|CDateよりDateSerial - 
          
            
      
      

[VBA]開始と終了イベント停止と再開 【VBA高速化】開始と終了のルーチン呼び出し - 
          
            
      
      

[VBA]Transpose2D Array 【VBA】配列の縦横変換|WorksheetFunction.Transpose は使わない - 
          
            
      
      

dictionaryをセットする 【VBA】Dictionaryのセット|CreateObject(“Scripting.Dictionary”) - 
          
            
      
      

[VBA]ClearContentsシート初期化 【VBA】シートの初期化|ClearContentsで値のみ削除 - 
          
            
      
      

[VBA]StrCompで文字列比較 【VBA】拡張子の存在確認|Right + StrComp