プロが教える店舗&オフィスのセキュリティ対策術

WindowsVista HomePremium
Excel 2007
Microsoft Visual Basic 6.5 です。

Excelでユーザーフォーム(UserForm1)を作り、
  Sub Auto_Open()
    UserForm1.Show
  End Sub
で起動時に呼び出すようにしました。
確認のため、一度Excelを閉じ起動し直したところ正常に動作しました。
もう一度確認のため同じように再起動をすると、

 実行時エラー '2110':
コントロールが表示されていない、利用できない、またはフォーカスを持てないため、そのコントロールにフォーカスを移すことはできません。

と出て、それ以降何度やっても動作しなくなってしまいました。
解決法か原因がわかる方いらっしゃいましたら、ぜひご教授ください。よろしくおねがいします。

ユーザーフォーム関係のコードを以下に書いておきます。(内容は小遣い帳のようなものです。)
――――――――――――――――――――
Private Sub CommandButton1_Click()
Dim NUM As Integer

If TextBox1.Text = "" Then
MsgBox "概要が記入されていません。"
TextBox1.SetFocus
GoTo 100
ElseIf TextBox2.Text = "" Then
MsgBox "収支が記入されていません。"
TextBox2.SetFocus
GoTo 100
ElseIf ComboBox1.ListIndex = -1 Then
MsgBox "収支の種類が選択されていません。"
ComboBox1.SetFocus
GoTo 100
End If

Range("F6").Select
NUM = 0
Do While ActiveCell.Offset(NUM, 0) <> ""
NUM = NUM + 1
Loop
ActiveCell.Offset(NUM, 0).Select
ActiveCell = TextBox1.Value

If CheckBox1 = True Then
TextBox2 = -TextBox2
End If

If ComboBox1.ListIndex = 0 Or ComboBox1.ListIndex = 1 Then
ActiveCell.Offset(0, ComboBox1.ListIndex + 1) = TextBox2.Value
Else
ActiveCell.Offset(0, ComboBox1.ListIndex + 2) = TextBox2.Value
End If

TextBox1 = ""
TextBox2 = ""
CheckBox = Falses
ComboBox1.ListIndex = -1
100 End Sub
――――――――――――――――――――
Private Sub CommandButton2_Click()
Dim NUM As Integer

If TextBox3.Text = "" Then
MsgBox "移動金額が記入されていません。"
TextBox3.SetFocus
GoTo 100
ElseIf ComboBox2.Text = "" Then
MsgBox "移動元が選択されていません。"
ComboBox2.SetFocus
GoTo 100
ElseIf ComboBox3.ListIndex = -1 Then
MsgBox "移動先が選択されていません。"
ComboBox3.SetFocus
GoTo 100
End If

Range("F6").Select
NUM = 0
Do While ActiveCell.Offset(NUM, 0) <> ""
NUM = NUM + 1
Loop
ActiveCell.Offset(NUM, 0).Select
ActiveCell = "移動"

If ComboBox2.ListIndex = 0 Or ComboBox2.ListIndex = 1 Then
ActiveCell.Offset(0, ComboBox2.ListIndex + 1) = -TextBox3.Value
Else
ActiveCell.Offset(0, ComboBox2.ListIndex + 2) = -TextBox3.Value
End If

If ComboBox3.ListIndex = 0 Or ComboBox3.ListIndex = 1 Then
ActiveCell.Offset(0, ComboBox3.ListIndex + 1) = TextBox3.Value
Else
ActiveCell.Offset(0, ComboBox3.ListIndex + 2) = TextBox3.Value
End If

TextBox3 = ""
ComboBox2.ListIndex = -1
ComboBox3.ListIndex = -1
100 End Sub
――――――――――――――――――――
Private Sub CommandButton3_Click()
Unload Me
End Sub
――――――――――――――――――――
Private Sub CommandButton4_Click()
Unload Me
End Sub
――――――――――――――――――――
Private Sub UserForm_Initialize()
myarray1 = Array("収支", "クレジット", "郵便局", "机", "500", "1")
For i = 0 To 5
ComboBox1.AddItem myarray1(i)
ComboBox2.AddItem myarray1(i)
ComboBox3.AddItem myarray1(i)
Next i
TextBox1.SetFocus
End Sub

A 回答 (1件)

こんばんは。



Auto_Open の代わりに、ThisWorkbook モジュールのWorkbook_Open イベントは試してみましたか。
これは、ダメ元ですが、Auto_Open は、反応が遅いです。

それと、今回の原因は、Excel 2007 のActive X コントロールのセキュリティの関係で、起動までに手間が掛かるのではないでしょうか。

その場合は、OnTime で、タイムラグを作るしかないと思います。ほんの数秒でかまわないはずです。

Sub Auto_Open()
Application.OnTime Now() + TimeValue("00:00:02"), "Start1"
'2秒待つ
End Sub

Sub Start1()
 UserForm1.Show
End Sub

なお、すべてのコードは見ていませんが、UserForm_Initialize() で、

TextBox1.SetFocus

は、必要ですか。ふつうは、TabIndex を0にすればよいと思います。

それから、ループは不要ですね。

Dim MyArray1()
MyArray1 = Array("収支", "クレジット", "郵便局", "机", "500", "1")
ComboBox1.List = MyArray1()
ComboBox2.List = MyArray1()
ComboBox3.List = MyArray1()

となりますね。
    • good
    • 0
この回答へのお礼

こんばんは。
早速の回答、ありがとうございます。

Auto_Open()をWorkbook_Open()に変えたところ、正常に動作しました!
ComboBoxもそういう入れ方があるんですね…。
まだまだVBA歴3日なので、知らないことばかりです^^ゞ

TextBox1.SetFoucusは仰る通り不要でした。
ご指摘ありがとうございます^^

こんなに早く解決するとは思ってませんでした。
ありがとうございました!

お礼日時:2008/04/25 03:24

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

このQ&Aを見た人はこんなQ&Aも見ています