データの分析、グラフ作成、および通信のためのツールを備えた Microsoft 表計算ソフトウェアのファミリ。
引続きテストしてみました。
全く解決にはつながらないのですが、手動、自動を問わず、ユーザーフォームに最後に置かれたFrame以外のFrameにFrameを置こうとするとエラーになるようですね。
例1
UserForm1に数個のFrameを配置して実行
Sub aaa()
Dim wCtrl
For Each wCtrl In UserForm1.Controls
If LCase(TypeName(wCtrl)) = "frame" Then
On Error Resume Next
With wCtrl.Controls.Add("forms.frame.1")
.BackColor = RGB(0, 0, 0)
End With
If Err <> 0 Then
MsgBox wCtrl.Name
End If
On Error GoTo 0
End If
Next
UserForm1.Show
Unload UserForm1
End Sub
例2
空のUserForm2に対して実行
Sub bbb()
With UserForm2
Set wctrl1 = .Controls.Add("forms.frame.1")
Set wctrl2 = .Controls.Add("forms.frame.1")
With wctrl1
.Controls.Add "forms.frame.1"
End With
.Show
End With
なお、両方共ユーザーフォームは表示されますが、これはエラーエスケープしているためらしく、フォームがUnloadされる時にExcelがクラッシュすることは同じです。
珍しいと思われるケースでも英語圏の情報を検索して見ると結構いろいろ出てくるのですが、これに関しては、ざっと見たところ1件くらいしかなく、それも単に上手く行きませんレベルの情報になっていて複数のFrameがあるのかどうか判然としませんし、解決にも至っていませんでした。
Excel2003でも発生するので、昨日今日の話ではないのですが、こんなことやる人少ないみたいですね。
VBAの場合バグであるとMSが認めても、影響範囲が大きいもの以外の対応は非常に遅くなるようですので大体手段がないか思いつくままにためしてみたのですが、全部だめでした。
悪しからず。