|
レス付かないのでもう見て居ないかな?
やった事が無いので、少し試して見ました
多分こんな事だろう程度で申し訳有りませんが、
気が付いた事が有りましたので書いて置きます
Set MY_window = A_window
は、A_windowがLoadされ、Object変数MY_windowに参照が代入されます
其処で、自身以外の場合は善いのですが、「UserForm_QueryClose」で
「CloseMode = vbFormControlMenu」の時、自身の参照をMY_windowに代入しても
其の後、自身がUnloadされるのでMY_windowが不定?に成るので起こると思われます
因って、「CloseMode = vbFormControlMenu」の時は、
「UserForm_QueryClose」をキャンセルし、自分自身をHideにすれば善いと思われます
以下に、修正して見たたコードを載せます
'<ThisBook>----------
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim i As Long
With UserForms
For i = 0 To UserForms.Count - 1
'コレクションから削除されるので、
'繰り上がりの為常に.Item(0)
Unload .Item(0)
Next i
End With
Set MY_window = Nothing
End Sub
Private Sub Workbook_Open()
SCkey
Set MY_window = A_window
End Sub
'<フォーム:A_window>----------
Option Explicit
Private Sub B_dush_Click()
Set MY_window = B_window
Unload Me
End Sub
Private Sub C_dush_Click()
Set MY_window = C_window
Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Set MY_window = Me
Cancel = True
Me.Hide
End If
End Sub
'<フォーム:B_window>----------
Option Explicit
Private Sub A_project_Click()
Set MY_window = A_window
Unload Me
End Sub
Private Sub C_projecr_Click()
Set MY_window = C_window
Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Set MY_window = Me
Cancel = True
Me.Hide
End If
End Sub
'<フォーム:C_window>----------
Option Explicit
Private Sub A_cat_Click()
Set MY_window = A_window
Unload Me
End Sub
Private Sub B_cat_Click()
Set MY_window = B_window
Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Set MY_window = Me
Cancel = True
Me.Hide
End If
End Sub
'<標準モジュール>----------
Option Explicit
Public MY_window As Object
Sub SCkey()
Application.OnKey "%^{F12}", "MYshow"
End Sub
Sub MYshow()
MY_window.Show
End Sub
|
|