• ベストアンサー

ユーザーフォームの呼び出しでエラー

環境:WindowsXP,Excel2000 入力ファイルを1行ずつ読み込んで ある条件の場合は、“AAAForm”を呼び出します。 ----- Public Sub 処理()   ~(略)~   ' ファイルのEOF(End of File)まで繰り返す   Do Until EOF(intFF)     ~(略)~     Load AAAForm     AAAForm.Show     Unload AAAForm     ~(略)~   Loop   ~(略)~ End Sub ----- 1回目は成功して、 制御がフォームに移ります。 OKボタンを押したら ----- Private Sub OK_Click()   Me.Hide End Sub ----- として、制御が“処理()”に戻り “AAAForm”はメモリから削除されます。 入力ファイルから入力レコードを繰り返し読み込んで また、同条件の場合は、“AAAForm”を呼び出したいのですが、 2回目の“AAAForm”の呼び出しは失敗して“処理()”の 下記の位置で止まります。     load AAAForm エラーメッセージは下記の通り ----- 実行時エラー '5': プロシージャの呼び出し、または引数が不正です。 ----- 考えられる原因が何か、お解かりになる方はご教授ください。 お願いします。

  • vide
  • お礼率59% (101/170)

質問者が選んだベストアンサー

  • ベストアンサー
  • k-pix
  • ベストアンサー率51% (50/98)
回答No.1

はっきりとした原因は、私にはわからないのですが、 http://support.microsoft.com/kb/811469/ja が参考になるのではないかと思います。 とりあえず回避策としまして、   Load AAAForm   ' ファイルのEOF(End of File)まで繰り返す   Do Until EOF(intFF)     ~(略)~     AAAForm.Show     ~(略)~   Loop   Unload AAAForm とされればよいのではないでしょうか?

vide
質問者

お礼

お、何やらエラーメッセージで止まらなく なりました。 進展しました。 ありがとうございました。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>Private Sub OK_Click()   Me.Hide End Sub で、飛んできてHideしますが、UnLoadはしません。 しかし次ぎのレコードを読んで条件に該当すると、Loadしようとしませんか。 Private Sub OK_Click()では、本体に戻らないはずですからUnlosdされないのでは。 質問のコードの流れ(Private Sub OK_Click()と本体の関連)が良くわからないので、勘違いだったらお許しを。

vide
質問者

お礼

回答ありがとうございます。 そう、私も似たような事を考えたんですよね。 > Private Sub OK_Click()では、本体に戻らないはずですから 呼び出し元の“Public Sub 処理()”に戻れば次行の Unload AAAForm を実行するはずなのにしてないのかな?って。 フォームを Hideするとどこに行くのでしょう? あいまいなままです。

関連するQ&A

  • 別フォームの呼び出し

    6.0でやってます。 form1からform2を呼び出す時、Command1_Clickの処理内で Set FORM = New form2 Call FORM.Show と書いて、form2が呼び出されたらYesNoメッセージボックスを表示し、 Yesを押したらform1のPublicプロシージャに飛んでからform2をUnloadし、Noだったらform2をUnloadするプログラムを作りたいのですが、クリックするとform2が表示されずに、メッセージボックスだけが表示されて、YesNoを選択した後でform2が表示されてしまいます。 それに、Call FORM.Showの処理に行くと、"既にアンロードされています"といったエラーが出ます。 書く順番がおかしいのでしょうか? *****form1のコード******* Private Sub Command1_Click() Set FORM = New form2 Call FORM.Show End Sub Public sub aaa() (処理) End Sub *****form2のコード****** Private Sub Form_Load() msg = MsgBox("戻りますか??", 4, "確認メッセージ") If msg = vbYes Then Form1.aaa Unload Me Else Unload Me End If

  • ユーザーフォーム 背景に色が付かない。

    前処理が済んだ時点でuserformを表示し、 本処理に入る方法を教えていただきました。 そして以下のようにコーディングしました。 Sub userformd() 前処理 UserForm1.Show vbModeless 本処理 Unload UserForm1 End Sub 思った通り処理が出来たのですが、 背景に色を付けてみようと、以下のように手を加えたのですが、 色が付きません。 原因と対応法をお教え下さい。 Sub userformd() 前処理 UserForm1.BackColor = RGB(255, 0, 0) UserForm1.Show vbModeless 本処理 Unload UserForm1 End Sub 宜しくお願いします。

  • VBA エラーハンドラーについて

    VBAについてお教えください。テキストファイルを開いて、データ処理を行おうと思っています。 下記のような処理をおこなっています。 On Error GoTo ErrorHandler 'ファイル番号を取得 FNo = FreeFile Do While Not EOF(FNo) ~~処理 ~~処理 Loop 'ファイルを閉じる Close #FNo ErrorHandler: ~~処理 end sub ループが無事に終わって、ファイルを閉じるところまで行くのは良いのですが、Close #FNoの後に処理がErrorHandler:に移ってしまいます。 特に問題が無ければ、ErrorHanderを飛び越えてend subに行くと思っていたのですが、認識が違うのでしょうか? それとも何らかのエラーが起こっているのでしょうか?

  • ユーザーフォームに入力したデーターが転記できない

    いつもお世話になります。 Windows7 excell2010 です。 いろんなものに勉強してここまでに作成したユーザーフォームですが、データーは入力できるのですがコマンドボタンをクリックしても各セルに反映されません。 色々と試行錯誤していますがうまくゆきません。 どこに不具合があるかわからず恐れ入りますがどなたかご指導いただけませんか。 参考にコードは参考に下記にします。 ユーザフォームのVBAは下記です コード ※Module1 Sub 売上() Do UserForm1.Show Loop End Sub Sub 入金() Do UserForm2.Show Loop End Sub ※UserForm1 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "1" .AddItem "2" .AddItem "3" End With End Sub Private Sub CommandButton1_Click() n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 2) = UserForm1.TextBox1.Text Cells(n, 3) = UserForm1.TextBox2.Text Cells(n, 4) = UserForm1.TextBox3.Text Cells(n, 11) = UserForm1.ComboBox1.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub ※UserForm2 Private Sub CommandButton1_Click() n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 2) = UserForm2.TextBox1.Text Cells(n, 3) = UserForm2.TextBox2.Text Cells(n, 4) = UserForm2.TextBox3.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub

  • マクロ ユーザーフォームが表示されない

    いつも回答して頂き、ありがとうございます。 Sub UserForm1() UserForm1.Show End Sub と記述しましたが、エラーが発生し、ユーザーフォームが表示してくれません。 コンパイルエラー:Functionまたは変数が必要です フォームはコマンドボタンを一つ配置し、 Private Sub CommandButton1_Click() Unload UserForm1 End Sub と記述してあるだけです。何が悪いのでしょうか?御教授の程宜しくお願い致します。

  • ユーザーフォームの入力時のマクロについて

    いつもお世話になります。 Windows7 excell2010 です。 今まさにVBAをやり出してあまりわかっていませんが下記のようにまでになったところです。 ご指導をいただきたいのは、 参照図にあるUserForm1に入力するとき、 「日付」 ime が 半角数値 「顧客名」ime が ひらがな 「売上」 ime が 半角数値 を自動的にする マクロ を記述したいです。 ご指導いたたければ幸いです。 下記のようなマクロが記述されています。 ※UserForm1 コード表示 Private Sub CommandButton1_Click() n = 1 Do n = n + 1 Loop While Cells(n, 1) <> "" Cells(n, 1) = UserForm1.TextBox1.Text Cells(n, 2) = UserForm1.TextBox2.Text Cells(n, 3) = UserForm1.TextBox3.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub ※標準モジュール Sub FormSample() Do UserForm1.Show Loop End Sub Sub Test() MsgBox "ボタンによるマクロの実行" End Sub

  • エクセルユーザーフォームで困ってます。

    エクセル初心者です。 自分のユーザーフォーム(住所、商品登録)を作りたくて大変困ってます。 下記は、ネットなどをみて貼り付けたのですが、上手くいきません。 まずTOPページを作り、ユーザーフォームを呼び出すボタンを作り、クリックすると フォームが出るようにしてあります。 そこに、自分の入力したいものをユーザーフォームにテキストでつくり、シート9に 登録ボタンを作りクリックしたら、シートに反映させたいと思ってます。 登録ボタンを押したら、入力画面はクリアにしたいです。 他にいろいろやりたい事もあるのですが、入力した順番に001・002・003と顧客番号をつけたり 検索ボタンを作って、名前や、顧客番号を入れると情報を呼び出したり、請求書用のプリントシートや、封筒シートに簡単に反映できればと思っています。 しかし、まだまだそこまではいかず、最初でつまずいてます。 現状は、フォームを呼び出すときに実行時エラーがでます。 どうしても、自分の使い勝手のいいものを作りたいので どうか、助けてください。大変まいってます。 長文になりますが、どうかよろしくお願いします。 下記の入力中のものをみていただけて、いろいろ意見をいただけるとありがたいです。 Sub FormShow() UserForm1.Show End Sub 'Sheet9へ書き込む Private Sub 登録_Click() Dim i As Integer With Worksheets(9) 'テキストボックスの値を書き出し For i = 1 To 80 .Range("B" & i) = UserForm1.Controls("TextBox" & i).Text Next End With End Sub 'Formを呼び出したとき、Sheet9から読み込む Private Sub UserForm_Initialize() Dim i As Integer With Worksheets(9) 'テキストボックスの値を読み込み For i = 1 To 80 UserForm1.Controls("TextBox" & i).Text = .Range("B" & i) Next End With End Sub '終了ボタン Private Sub CommandButton2_Click() Unload Me End Sub

  • ユーザーフォームVBAでCells(n, 7)が

    いつもお世話になります Windows7 excell2010 です ご指導を仰ぎたいのは参照図で言うと、 TextBox1~6 は順調に入力しますがTextBox7にすると「入力」に飛び 参照図のG13に入力されません。 VBAを勉強し始めたはかりですのでどこが悪いかわかりません。 恐れ入りますがご指導願えませんでしょうか。 下記参考にします。 Module のコードには Sub FormSample() Do UserForm1.Show Loop End Sub Sub Test() MsgBox "ボタンによるマクロの実行" End Sub UserForm1 Private Sub CommandButton1_Click() n = 1 Do n = n + 1 Loop While Cells(n, 1) <> "" Cells(n, 1) = UserForm1.TextBox1.Text Cells(n, 2) = UserForm1.TextBox2.Text Cells(n, 3) = UserForm1.TextBox3.Text Cells(n, 4) = UserForm1.TextBox4.Text Cells(n, 5) = UserForm1.TextBox5.Text Cells(n, 6) = UserForm1.TextBox6.Text Cells(n, 7) = UserForm1.TextBox7.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub

  • ユーザーフォームが閉じたいのですが

    皆様こんにちは。 ExcelVBAを使ってユーザーフォームを作っています(初心者)。 どうしてもわからないので教えてください。 ちなみに、以下のように組んでいます。 Private Sub 商品区分txt_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If IsNumeric(商品区分txt) = False Then   MsgBox "商品区分は数値を入力してください", , "商品区分エラー"   Cancel = True   Exit Sub End If If 商品区分txt < 1 Or 商品区分txt > 100 Then   MsgBox "商品区分は1~100までの値で入力してください", , "商品区分エラー"   Cancel = True   Exit Sub End If End Sub 説明させていただくと、「単価変更」というボタンを配置しています。 そのボタンをクリックするとユーザーフォームが立ち上がります。 商品区分と単価変更率を入力するテキストボックスがあります。 両方を入力後「単価変更実行」というボタンを押すようになっています。 すると指定した商品区分の商品の単価が変更されるようになります。 ちなみに、「終了」ボタンもあります。 商品区分は1~100まであり、その範囲外の場合と数値以外が入力された場合はエラーメッセージがでるようになっています。 たとえば、商品区分に200を入力するとメッセージが出て次のコントロールにいけないようになっています。 そこで200を消します。そして、「とりあえず終了したい」となり、終了ボタンを押してもエラーメッセージが出てしまいます。 このメッセージは出したくありません。 出さないようにするにはどうしたらいいでしょうか? BeforeUpdateじゃなく何か別のイベントを選ぶといいのでしょうか? ちなみに、終了ボタンはUnload Meとしてあるので通常は閉じることは可能です。 長文ですみません。よろしくお願いします。

  • マクロのユーザーフォームについて(エラー)

    現在、エクセルのマクロ・ユーザーフォームを使って書式を作っています。 ユーザーフォームを幾つか使っているのですが、ある一つのフォームを開こうとするとそれだけ”インディックスが有効範囲にありません。”とエラーが出ます。 他のフォームと構文の内容はほぼ同じなのですが、それだけ開かないのです。どこが間違っているのか、教えていただけないでしょうか? ■ユーザーフォーム2からユーザーフォーム7を開きたい■ -----ユーザーフォーム2の構文----- Private Sub CommandButton2_Click() '出張期間を閉じて業務内容を開く Unload UserForm2 Dim myRow As Long Dim myMaxNo As Integer   myRow = 12 myMaxNo = Worksheets("規定").Range("E25").Value Do Until Cells(myRow, 22) = "" myRow = myRow + 1 Loop If (myRow - 12) >= myMaxNo Then MsgBox "入力できる件数を超えています。" Else UserForm7.Show ※←ここで止まってしまいます。 End If End Sub

専門家に質問してみよう