回答編集履歴

3

追記

2018/01/18 09:20

投稿

sousuke
sousuke

スコア3828

test CHANGED
@@ -58,6 +58,8 @@
58
58
 
59
59
 
60
60
 
61
+ #追記
62
+
61
63
  ```vba
62
64
 
63
65
  Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
@@ -104,7 +106,7 @@
104
106
 
105
107
 
106
108
 
107
- private Declare Function ShowWindow Lib "User32" (ByVal Hwnd As Long, _
109
+ private Declare PtrSafe Function ShowWindow Lib "User32" (ByVal Hwnd As Long, _
108
110
 
109
111
  ByVal nCmdShow As Long) As Long
110
112
 

2

再追記

2018/01/18 09:20

投稿

sousuke
sousuke

スコア3828

test CHANGED
@@ -55,3 +55,97 @@
55
55
  呼ぶ時は```call ShowWindow(Me.Hwnd2, SW_SHOWMAXIMIZED)```
56
56
 
57
57
  みたいな感じで。
58
+
59
+
60
+
61
+ ```vba
62
+
63
+ Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
64
+
65
+ (ByVal hwnd As Long, _
66
+
67
+ ByVal nIndex As Long) As Long
68
+
69
+ Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
70
+
71
+ (ByVal hwnd As Long, _
72
+
73
+ ByVal nIndex As Long, _
74
+
75
+ ByVal dwNewLong As Long) As Long
76
+
77
+ Private Declare PtrSafe Function DrawMenuBar Lib "user32" _
78
+
79
+ (ByVal hwnd As Long) As Long
80
+
81
+ Private Declare PtrSafe Function WindowFromAccessibleObject Lib "oleacc" ( _
82
+
83
+ ByVal pacc As Object, _
84
+
85
+ ByRef phwnd As Long) As Long
86
+
87
+ Private Const GWL_STYLE = (-16) 'ウィンドウスタイルを取得
88
+
89
+ Private Const WS_THICKFRAME = &H40000 'ウィンドウのサイズ変更
90
+
91
+ Private Const WS_MINIMIZEBOX = &H20000 '最小化ボタン
92
+
93
+ Private Const WS_MAXIMIZEBOX = &H10000 '最大化ボタン
94
+
95
+
96
+
97
+ '↓ここ##################################
98
+
99
+ Const SW_SHOWNORMAL = 1
100
+
101
+ Const SW_SHOWMINIMIZED = 2
102
+
103
+ Const SW_SHOWMAXIMIZED = 3
104
+
105
+
106
+
107
+ private Declare Function ShowWindow Lib "User32" (ByVal Hwnd As Long, _
108
+
109
+ ByVal nCmdShow As Long) As Long
110
+
111
+ '↑ここ##################################
112
+
113
+
114
+
115
+ Private Sub UserForm_Initialize()
116
+
117
+ Dim fStyle As Long
118
+
119
+ Dim hwnd As Long
120
+
121
+ 'ユーザーフォームのハンドルを取得する
122
+
123
+ WindowFromAccessibleObject UserForm, hwnd
124
+
125
+ 'ウィンドウに関する情報を取得する
126
+
127
+ fStyle = GetWindowLong(hwnd, GWL_STYLE)
128
+
129
+ 'Min,Maxメニューボタンを付加する
130
+
131
+ fStyle = (fStyle Or WS_THICKFRAME Or WS_MAXIMIZEBOX Or WS_MINIMIZEBOX)
132
+
133
+ 'ユーザーフォームのボタンを再設定する
134
+
135
+ SetWindowLong hwnd, GWL_STYLE, fStyle
136
+
137
+ 'ユーザーフォームのメニューバー外枠を再描画する
138
+
139
+ DrawMenuBar hwnd
140
+
141
+ UserForm.Show
142
+
143
+ '↓ここ##################################
144
+
145
+ call ShowWindow(hwnd, SW_SHOWMAXIMIZED)
146
+
147
+ '↑ここ##################################
148
+
149
+ End Sub
150
+
151
+ ```

1

追記

2018/01/18 09:00

投稿

sousuke
sousuke

スコア3828

test CHANGED
@@ -23,3 +23,35 @@
23
23
  呼ぶ時は```call ShowWindow(Me.hwnd, SW_SHOWMAXIMIZED)```
24
24
 
25
25
  みたいな感じで。
26
+
27
+
28
+
29
+ #追記
30
+
31
+ ExcelにHwndないんですね。追加します
32
+
33
+ ```vba
34
+
35
+ Private Declare Function ShowWindow Lib "User32" (ByVal hWnd As Long, _
36
+
37
+ ByVal nCmdShow As Long) As Long
38
+
39
+ Private Declare Function WindowFromAccessibleObject Lib "oleacc.dll" _
40
+
41
+ (ByVal IAcessible As Object, ByRef Hwnd As Long) As Long
42
+
43
+
44
+
45
+ Public Property Get Hwnd2() As Long
46
+
47
+ WindowFromAccessibleObject Me, Hwnd2
48
+
49
+ End Property
50
+
51
+
52
+
53
+ ```
54
+
55
+ 呼ぶ時は```call ShowWindow(Me.Hwnd2, SW_SHOWMAXIMIZED)```
56
+
57
+ みたいな感じで。