ここから本文です

VBAのユーザーフォームについてお伺いします。 会社にあるエクセルファイルのユー...

アバター

ID非公開さん

2017/10/413:19:27

VBAのユーザーフォームについてお伺いします。
会社にあるエクセルファイルのユーザーフォームには、ウインドウズのエクスプローラーのような最小化ボタンと最大化ボタンが付いています。

ースを覗いたところ、以下の記述でそういう動作をしているようです。

Option Explicit
Private Declare Function FindWindow _
Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String _
, ByVal lpWindowName As String) As Long

Private Declare Function GetWindowLong _
Lib "user32" Alias "GetWindowLongA" _
(ByVal Hwnd As Long, ByVal nIndex As Long) As Long

Private Declare Sub SetWindowLong _
Lib "user32" Alias "SetWindowLongA" _
(ByVal Hwnd As Long, ByVal nIndex As Long _
, ByVal dwNewLong As Long)

Private Declare Sub DrawMenuBar _
Lib "user32" (ByVal Hwnd As Long)

Private Const GWL_STYLE As Long = -16
Private Const WS_THICKFRAME As Long = &H40000
Private Const WS_MAXIMIZEBOX As Long = &H10000
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Sub UserForm_Initialize()

Const fWINDOWSTYLE As Long _
= WS_THICKFRAME Or WS_MAXIMIZEBOX Or WS_MINIMIZEBOX
Dim myHwnd As Long
Dim myWindowLong As Long
myHwnd = FindWindow("ThunderDFrame", Caption)
myWindowLong = GetWindowLong(myHwnd, GWL_STYLE)
SetWindowLong myHwnd, GWL_STYLE, myWindowLong Or fWINDOWSTYLE
DrawMenuBar myHwnd

End Sub

入力後、ユーザーフォーム右上の最小化ボタン「ー」を押して最小化していますが、それをボタンクリックのプロシージャに追加して自動最小化する事は可能でしょうか?可能ならどのように記述すればよいでしょうか?

閲覧数:
43
回答数:
1

違反報告

ベストアンサーに選ばれた回答

2017/10/423:58:34

APIを使ってOSの機能を呼び出しているようなので
その流れでやるのがいいのかもしれません。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/50fc07a0-34e...

ShowWindow というAPI関数を使う準備をする
SW_SHOWMINIMIZED という定数を定義する

最小化したいタイミングで
myHwnd を入手したうえで
ShowWindow(iHwnd, SW_SHOWMINIMIZED)を呼ぶ

上記のURL は VB.net なので VBA とは厳密には違いますが
まあ、雰囲気としては同じような感じでやればいいように思います

この質問は投票によってベストアンサーに選ばれました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

5文字以上入力してください

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。