アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://www.serpress.co.jp/excel/vba047.html
ここを参考にユーザーフォームに最小化のボタンをつけたのですがこの最小化を任意にするにはどうしたらいいでしょうか?

具体的にはユーザーフォームのボタンから他のエクセルを開いた時にとりあえずユーザーフォームを最小化しておきたいのです
フォーム自体を小さくすることも考えたのですがまた戻すのが面倒でした。
ですので上記で作成したボタンを実行するには
どうしたらいいでしょうか?
是非皆様のお力を貸してください。

A 回答 (3件)

ボタンって手動で行うためのものですよね。


わざわざそれをつけたのですから、手動でおこなうべきではないでしょうか。

 そうでないなら、幅と高さを任意に設定できるわけですから
面倒でもそれを指定するしかないかと。。。。
(「最小化」とは違って最小化より少し大きい状態までしか小さくできないはずです。)
    • good
    • 0

一旦表示されてから、最小化されるのが見えるのがいまいちですが、とりあえず出来ます。


遅いのはxl2010の所為かな?

☆標準モジュール
Sub test()
UserForm1.Show vbModeless
End Sub

☆UserForm1モジュール
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 Function SetWindowLong Lib "USER32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Declare Function DrawMenuBar Lib "USER32" _
(ByVal hWnd As Long) As Long

Private Declare Function CloseWindow Lib "USER32" (ByVal hWnd&) As Long

Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME = &H40000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_MAXIMIZEBOX = &H10000

Dim hWnd As Long

Private Sub UserForm_Initialize()
Dim fStyle As Long
Dim fRet As Long

hWnd = FindWindow("ThunderDFrame", Me.Caption)
fStyle = GetWindowLong(hWnd, GWL_STYLE)
fStyle = (fStyle Or WS_THICKFRAME Or WS_MAXIMIZEBOX Or WS_MINIMIZEBOX)
fRet = SetWindowLong(hWnd, GWL_STYLE, fStyle)
fRet = DrawMenuBar(hWnd)
End Sub

Private Sub UserForm_Activate()
Dim fRet As Long

fRet = CloseWindow(hWnd)
End Sub
    • good
    • 0

#2です。

追伸。
xl2003で試したところ、CPUの周波数は半分程度のマシンにもかかわらず、元サイズのウィンドウの表示はほとんど分からないレベルでした。こんなところもxl2010は遅い事が分かりました。
ご参考まで。
    • good
    • 0

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