重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【終了しました】教えて!goo新規会員登録

いつもお世話になっております(標準モジュール)
ネットで検索したらユーザーフォームを半透明
するコードをみつけました。
だけど、なぜかユーザーフォームに
とりつけてあるコマンドボタン・リストボックスなどが
きえてしまいます。

消えない方法のやり方おしえてくれませんでしょうか


Public Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" _
(ByVal classname As Any, ByVal winname As Any) As Long
Public Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hwnd&, ByVal idx&, ByVal style&) As Long
Public Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hwnd&, ByVal idx&) As Long
Public Declare Function SetLayeredWindowAttributes Lib "user32" _
(ByVal hwnd&, ByVal crKey As Long, _
ByVal bAlpha As Long, ByVal dwFlags As Long) As Long

Public Const GWL_EXSTYLE = (-20)
Public Const WS_EX_TOOLWINDOW = &H80
Public Const WS_EX_LAYERED = &H80000

Public Const LWA_COLORKEY = 1
Public Const LWA_ALPHA = 255


Sub test()
UserForm1.Show
End Sub

(フォーム)
Private Sub UserForm_Initialize()
hwnd& = FindWindow("ThunderDFrame", Me.Caption)
If hwnd& <> 0& Then
SetWindowLong hwnd&, GWL_EXSTYLE, _
GetWindowLong(hwnd&, GWL_EXSTYLE) Or WS_EX_LAYERED
SetLayeredWindowAttributes hwnd&, 0, 192, LWA_ALPHA
End If
End Sub

質問者からの補足コメント

  • うーん・・・

    ご連絡遅れて申し訳ありません
    はい、半透明でした。
    いつも画面をコピー?スクリーンショットみたいなので
    やったらうつらなかったので、
    画像添付できませんでした。

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/05/19 18:08
  • いつも有難うございます。
    『システム色ではなく、パレット色から選択していきました。

    「ユーザーフォーム」の補足画像2
    No.1の回答に寄せられた補足コメントです。 補足日時:2020/05/19 18:17
  • うーん・・・

    いつも有難うございます。
    少し問題がでました。
    ×でuserformがとじれられないのと、
    移動ができませんでした。
    UserForm1.Show vbModeless
    を追加しましたが、無理でした。
    すこし、検索致します。
    有難うございます。

      補足日時:2020/05/19 18:22

A 回答 (2件)

No.1です。



あ”。
透明化ではなく半透明でしたか。。。。
「ユーザーフォーム」の回答画像2
この回答への補足あり
    • good
    • 0
この回答へのお礼

わかりました。
恐らくConst GWL_EXSTYLE = (-100)この数値を変えたらできました。
透明になっていまうとだめなんですね
恐らく
ありがとうございました。

お礼日時:2020/05/19 18:24

私が検証した物。



まずここのコードをユーザーフォームモジュールに書き込みます。
http://www.excel.studio-kazu.jp/kw/2018011721014 …
ここでの注意。
ユーザーフォームのバックカラーを『システム色ではなく、パレット色から選択したものにしておいて』に従って変更。

ただし以下の問題がありそうです。(うちのOfficeは64Bitなので)
https://excel-databace.hatenablog.com/entry/64bi …

なので書き込んだユーザーフォームモジュールコードの修正をしました。
Private Declare PtrSafe Function~ と PtrSafe を追加。
「ユーザーフォーム」の回答画像1
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!