teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2018/01/18 09:20

投稿

sousuke
sousuke

スコア3830

answer CHANGED
@@ -28,6 +28,7 @@
28
28
  呼ぶ時は```call ShowWindow(Me.Hwnd2, SW_SHOWMAXIMIZED)```
29
29
  みたいな感じで。
30
30
 
31
+ #追記
31
32
  ```vba
32
33
  Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
33
34
  (ByVal hwnd As Long, _
@@ -51,7 +52,7 @@
51
52
  Const SW_SHOWMINIMIZED = 2
52
53
  Const SW_SHOWMAXIMIZED = 3
53
54
 
54
- private Declare Function ShowWindow Lib "User32" (ByVal Hwnd As Long, _
55
+ private Declare PtrSafe Function ShowWindow Lib "User32" (ByVal Hwnd As Long, _
55
56
  ByVal nCmdShow As Long) As Long
56
57
  '↑ここ##################################
57
58
 

2

再追記

2018/01/18 09:20

投稿

sousuke
sousuke

スコア3830

answer CHANGED
@@ -26,4 +26,51 @@
26
26
 
27
27
  ```
28
28
  呼ぶ時は```call ShowWindow(Me.Hwnd2, SW_SHOWMAXIMIZED)```
29
- みたいな感じで。
29
+ みたいな感じで。
30
+
31
+ ```vba
32
+ Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
33
+ (ByVal hwnd As Long, _
34
+ ByVal nIndex As Long) As Long
35
+ Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
36
+ (ByVal hwnd As Long, _
37
+ ByVal nIndex As Long, _
38
+ ByVal dwNewLong As Long) As Long
39
+ Private Declare PtrSafe Function DrawMenuBar Lib "user32" _
40
+ (ByVal hwnd As Long) As Long
41
+ Private Declare PtrSafe Function WindowFromAccessibleObject Lib "oleacc" ( _
42
+ ByVal pacc As Object, _
43
+ ByRef phwnd As Long) As Long
44
+ Private Const GWL_STYLE = (-16) 'ウィンドウスタイルを取得
45
+ Private Const WS_THICKFRAME = &H40000 'ウィンドウのサイズ変更
46
+ Private Const WS_MINIMIZEBOX = &H20000 '最小化ボタン
47
+ Private Const WS_MAXIMIZEBOX = &H10000 '最大化ボタン
48
+
49
+ '↓ここ##################################
50
+ Const SW_SHOWNORMAL = 1
51
+ Const SW_SHOWMINIMIZED = 2
52
+ Const SW_SHOWMAXIMIZED = 3
53
+
54
+ private Declare Function ShowWindow Lib "User32" (ByVal Hwnd As Long, _
55
+ ByVal nCmdShow As Long) As Long
56
+ '↑ここ##################################
57
+
58
+ Private Sub UserForm_Initialize()
59
+ Dim fStyle As Long
60
+ Dim hwnd As Long
61
+ 'ユーザーフォームのハンドルを取得する
62
+ WindowFromAccessibleObject UserForm, hwnd
63
+ 'ウィンドウに関する情報を取得する
64
+ fStyle = GetWindowLong(hwnd, GWL_STYLE)
65
+ 'Min,Maxメニューボタンを付加する
66
+ fStyle = (fStyle Or WS_THICKFRAME Or WS_MAXIMIZEBOX Or WS_MINIMIZEBOX)
67
+ 'ユーザーフォームのボタンを再設定する
68
+ SetWindowLong hwnd, GWL_STYLE, fStyle
69
+ 'ユーザーフォームのメニューバー外枠を再描画する
70
+ DrawMenuBar hwnd
71
+ UserForm.Show
72
+ '↓ここ##################################
73
+ call ShowWindow(hwnd, SW_SHOWMAXIMIZED)
74
+ '↑ここ##################################
75
+ End Sub
76
+ ```

1

追記

2018/01/18 09:00

投稿

sousuke
sousuke

スコア3830

answer CHANGED
@@ -10,4 +10,20 @@
10
10
  ByVal nCmdShow As Long) As Long
11
11
  ```
12
12
  呼ぶ時は```call ShowWindow(Me.hwnd, SW_SHOWMAXIMIZED)```
13
+ みたいな感じで。
14
+
15
+ #追記
16
+ ExcelにHwndないんですね。追加します
17
+ ```vba
18
+ Private Declare Function ShowWindow Lib "User32" (ByVal hWnd As Long, _
19
+ ByVal nCmdShow As Long) As Long
20
+ Private Declare Function WindowFromAccessibleObject Lib "oleacc.dll" _
21
+ (ByVal IAcessible As Object, ByRef Hwnd As Long) As Long
22
+
23
+ Public Property Get Hwnd2() As Long
24
+ WindowFromAccessibleObject Me, Hwnd2
25
+ End Property
26
+
27
+ ```
28
+ 呼ぶ時は```call ShowWindow(Me.Hwnd2, SW_SHOWMAXIMIZED)```
13
29
  みたいな感じで。