Visio VBAでユーザーフォームを透明にするサンプルコード

Visio VBAでユーザーフォームを透明にするサンプルコードのアイキャッチ VBA

VBAで作ったユーザーフォームなんだけど、邪魔にならない方法ってないの?

透明にしちゃうとか・・・どう?

Visioで作業をしているとユーザーフォームを使うことがありますよね、フォームが邪魔になって図面が見づらい、その下の図面が見たいなんてことありませんか?

そんなときに便利なのが「透明フォーム」!
Windows 2000 以降で使えます。

透明なユーザーフォーム?

透明フォームはこんなに便利!!!

  • 作業スペースを邪魔しない
  • フォームを重ねても下の図面が見える
  • スタイリッシュでちょっとカッコイイ

2. サンプルコード

以下のVBAコードを使えば、Visioのユーザーフォームを透明にできます。
ユーザーフォームをダブルクリックしてコードを貼り付けて下さい。

フォームを透明にするにはWindows APIを使います。

Windows API?なんか難しそ・・・

今度別の記事で説明するね、
とりあえず今回は標準モジュールにこれをコピペすればOK~

コード


' Windows APIの宣言
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As Long
Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare PtrSafe Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As LongPtr, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Boolean

' 定数
Private Const GWL_EXSTYLE As Long = -20 'ウインドウ拡張スタイル
Private Const WS_EX_LAYERED As Long = &H80000  '透明化のスタイル
Private Const LWA_ALPHA As Long = &H2 '透明度

' ユーザーフォームの透明度を設定する
Public Sub SetFormTransparency(frm As Object, alpha As Byte)
    Dim exStyle As Long
    Dim hwnd As Long
    
    'Windowのハンドルを取得
    hwnd = FindWindow(vbNullString, frm.Caption)

    '拡張スタイルに透明化を追加する
    exStyle = GetWindowLong(hwnd, GWL_EXSTYLE) ' 現在の拡張スタイルを取得
    SetWindowLong hwnd, GWL_EXSTYLE, exStyle Or WS_EX_LAYERED ' 透明化スタイルを追加

    '透明度を設定(alpha: 0 完全透明 ~ 255 完全不透明)
    SetLayeredWindowAttributes hwnd, 0, alpha, LWA_ALPHA
End Sub

' ユーザーフォームが開かれたときに透明度を設定
Private Sub UserForm_Initialize()
    SetFormTransparency Me, 180  ' 透明度(0~255)
End Sub

このコードを実行すると、ユーザーフォームが**70%の透明度(180/255)**で表示されます!

透明度の調整-赤い字の部分を変更

  • 255 → 完全不透明
  • 128 → 半透明
  • 0 → 完全透明(消える)

ちょっと解説

ポイントは3つ

①FindWindowでユーザーフォームのハンドルを取得
FindWindow を使うと、指定したウィンドウのハンドル(hWnd)を取得できます。VBAのユーザーフォームを操作するには、このハンドルが必要になります。

②GetWindowLong, SetWindowLongで拡張スタイルに透明化を追加する
ウィンドウの見た目や動作を細かく設定するために「スタイル」と「拡張スタイル」があります。その「拡張スタイル」に透明化スタイルも含まれています。
GetWindowLong で現在のウィンドウの拡張スタイルを取得し、SetWindowLongWS_EX_LAYERED を追加することで、ウィンドウの透明化を可能にします。

③SetLayeredWindowAttributes で透明度を設定
SetLayeredWindowAttributes を使い、透明度(0~255)を設定します。数値が小さいほど透明になり、255で完全に不透明になります。

3. まとめ

いかがでしたか?
透明なユーザーフォームを簡単に作れたのではないでしょうか?
スタイリッシュでカッコいいですよねっ。

次回は「Visio VBAで線を引く方法」について解説予定です!

もっと便利なVisio VBAの使い方を知りたい? → ブログの他の記事もチェックしてね!😊

新しく追加したページに図形を描いたり、設定をカスタマイズしたりすることで、Visioの作図がさらに便利になります。

ぜひコピって活用してみて下さい!

タイトルとURLをコピーしました