Excelのダイアログを閉じるプログラムは?

このQ&Aのポイント
  • Excelでコマンドボタンを押すと表示されるダイアログの中で、2つ目のリストボックスを選択してOKを押すとダイアログが閉じるようなプログラムをVBAで作成したいです。ネットの参考資料を見ながら試していますがうまくいかず、助けてください。
  • Excelのコマンドボタンを押すと表示されるダイアログで、2つ目のリストボックスを選択してOKを押すとダイアログが閉じるプログラムをVBAで作成したいです。初心者なので、うまく書けません。助けてください。
  • Excelでコマンドボタンを押すと表示されるダイアログの中で、2つ目のリストボックスを選択してOKを押すとダイアログが閉じるようなVBAプログラムを作成したいです。ネットの資料を見ながら試しましたが、うまくいきません。助けてください。
回答を見る
  • ベストアンサー

Excelのダイアログを閉じるプログラムは?

現在Excelにて、コマンドボタンを押すとダイアログで 6つにグループ分けしたボタンを表示させ、 (たとえば野菜グループ、果物グループ、魚グループ、肉グループ... といった感じの6つのグループ) その6つのうちの一つ(たとえば果物グループ)を押すと、 果物のリストボックスが入ったダイアログが現れ、 そのリストから1つ(たとえばバナナ)を選択し、OKボタンを押すと 選んであったセルにバナナと入力されるというものです。 しかし、2つ目のリストボックスは、 リストから1つ選んでOKを押した時点で閉じるのですが、 1つ目のダイアログは6つのうちの1つを選択しても閉じず、 次のダイアログを起動させるプログラムしか組めていない為、 入力し終えたあと、自分で×(閉じる)ボタンを押して、 終了させなければなりません。 6つのうちの1つを選んで、次のダイアログを起動させた時点で 終了させるにはVBA(VBE?)にどう書き込めば良いのでしょうか? 2つ目に起動するリストボックスを表示させるダイアログの 閉じる為のプログラムと思われる箇所には 下記のように入力されています。 '確認ボタン(OKボタン)が押された場合の処理 If ListBox1.ListIndex > 0 Then ActiveCell.Value = ListBox1.List(ListBox1.ListIndex) なにぶん初心者なもので、全然分からないまま、 ネットの参考資料等を見ながらここまできましたが、 行き詰ってしまいお願いした次第です。 何卒、宜しくお願い致します。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >詳しく載ったHowTo本などご存知でしたら教えて頂けませんか? かんたんプログラミング Excel2003 VBA コントロール・関数編 http://www.amazon.co.jp/exec/obidos/ASIN/4774120286/ ここら辺りがよいと思います。 私個人としては、以下の書籍は、少し内容が細かすぎるなって思うこともあるのですが、かといって、他に探そうと思っても、後は、私の知っている本ですと、実教出版だった思いますが、教室用のテキスト「Excel VBA」で、解説がなかったりします。 この本を、100%理解する必要は絶対にないということだけは言っておきます。 分からない部分は飛ばし読みでもよいです。主要なところだけを、UserFormで試してみるだけでよいと思います。TextBox, ListBox CommandButton, CheckBox, ComboBox ぐらいでしょう。 この本の後は、関数の説明があるのですが、それほど必要ではありません。どういうものがあるか知っているだけでよいです。文字処理系の関数をチェックすればよいと思います。 巻末の付録も充実しているので、この本は、後々使えます。

guchi_yama
質問者

お礼

了解しました。(^^)/ 何から何までご回答頂きまして ありがとうございます。 この本を買ってバリバリやってみます! でもって、それでも分からないときにはまたご教授下さいませ;。 本当にありがとうございました。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 ダイアログシートのエラーの話は、原因は分からないのか、解決したのか分かりませんが、結局のところ、ダイアログ自体は、続けられているようですね。 失礼ですが、ExcelのVersionはいくつですか? DialogSheet の場合は、 UserForm のような Unload がありませんから、  DialogSheets(1).Hide  のような .Hide メソッドしかありません。 Excelは、 95(Ver.5)しか持っていないのなら仕方がありませんが、初心者と名乗られるのでしたら、せめて、UserForm からでないと、学習的にも発展しないように思います。もし、それで行き詰ってしまっても、それはしかたがないと思います。 Excel2000 でも、Helpには出てこないはずですし、知っている人も少ないと思います。

guchi_yama
質問者

お礼

そうなんです、勉強不足のままネット検索しながら続けているのですが、 やはりうまくいきません...。 バージョンはExcel2003です。 なので、 UserFormも試したみたのですが、ダイアログを作ってみたものの、 実行の仕方もいまいち分からず、WorkSheet上にも出せない始末で...。 もし宜しければマクロやVBAでのダイアログの作り方などが 詳しく載ったHowTo本などご存知でしたら教えて頂けませんか? もちろん、ユーザーフォームのやり方で(^^;)へ 何度もお手数をお掛けしてWendy02さんには申し訳なく思っています。 どうもすいませんでした。

関連するQ&A

  • ダイアログのリストボックスを3つ連ねて作りたい

    マクロの作成は全くの初心者なのですが、 うまい具合にそういったリスト表の作成マクロが載っていたので コピペして作ってみたのですが、 サイト通りの1つだけのリスト表ならうまくいくのですが 3つ連ねて、コントロールの書式設定で複数選択にチェックを入れているのですが、 選択するところまではうまくいきますが、OKボタンを押すとエラーが出ます。 そして、     '確認ボタン(OKボタン)が押された場合の処理 → If ListBox1.ListIndex > 0 Then の部分が黄色く表示されます。 何がおかしいのか、どこをどう直せば良いのか分かる方教えて下さい。 お願いします。 参考までに、私がコピペしたサイトを載せておきます。 リストもまさにサイトのような感じのものを 3つ連ねたいのです。果物のリスト、野菜のリスト、魚のリスト と、 いった感じで...。 宜しくお願い致します。 「はじめてのダイアログシート」というサイトです。 http://hp.vector.co.jp/authors/VA016119/excel95/dialog1.html 以下 参考 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Sub MyFormShow() Dim Dialog1 As DialogSheet Dim ListBox1 As ListBox 'オブジェクト変数の設定 Set Dialog1 = ThisWorkbook.DialogSheets("Dialog1") Set ListBox1 = Dialog1.ListBoxes(1) 'オブジェクト変数の設定 Set Dialog1 = ThisWorkbook.DialogSheets("Dialog1") Set ListBox2 = Dialog1.ListBoxes(2) 'ダイアログボックスの表示 If Dialog1.Show Then '確認ボタン(OKボタン)が押された場合の処理 If ListBox1.ListIndex > 0 Then ActiveCell.Value = ListBox1.List(ListBox1.ListIndex) End If Else 'キャンセルボタンが押された場合の処理 MsgBox "キャンセルされました。", vbInformation End If End Sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

  • Excelの5.0ダイアログについて

    いつもお世話になります。 過去質問を捜してみたのですが希望する回答がなかったため 質問させていただきます。 「まだ使ってるの?」と言われそうですが、 Excelの「MS5.0ダイアログ」を使ったシステムがあります。 10年以上動いているシステムなのですが、 この度、新規で機能の追加をする作業をしています。 ユーザフォームにしないのか?と聞いた所、 ダイアログシートで作ってくれ。といわれました。 開発環境はOSがXP、Excel2000です。 私自身は、 VBの経験は2年ほどあり、エクセルのマクロも触った事があります。 ユーザフォームを使っての開発もありますが、 ダイアログシートは今回初めて触る事になりました。 VBやユーザフォームを利用して組んでいた時には 出会わなかった文法に苦戦しております。 さて、前置きが長くなりました。 質問は ・ダイアログシート上に配置したOKボタンなどを押すと  勝手に終了してしまうのを防げないか。 というものです。 最終的にどう動かしたいのかと言いますと、 ---------------------------------------------------- 1・ダイアログシート上に配置したOKボタンを押す。 2・メッセージボックスを表示する。(OKボタンのみ) 3・OKボタンを押下するとメッセージボックスは閉じ、   シートはそのまま残っている。 ---------------------------------------------------- このようにしたいです。 現状では3の時にメッセージボックスと一緒にシートも終了していまいます。 可能ならばコレを阻止したいのですが方法はありますか? また、今後ダイアログシートで開発する際に参考になりそうな 本・サイトをご存知でしたら教えていただきたいです。 よろしくお願いいたします。

  • エクセルVBA ユーザーフォームのリストボックス

    エクセルVBAのユーザーフォームのリストボックスについて教えてください。 現在、以下のようにコードがされています。 Private Sub UserForm_Initialize() With UserForm.ListBox1 .AddItem "ABC" .AddItem "DEF" .AddItem "GHI" .ListIndex = 0 End With End Sub Private Sub ListBox1_Click() With ListBox2 .Clear Select Case UserForm.ListBox1.List(ListBox1.ListIndex) Case "ABC" .AddItem "123" .AddItem "456" .AddItem "789" Case "DEF" .AddItem "456" .AddItem "789" Case "GHI" .AddItem "789" End Select .ListIndex = 0 End With End Sub それで、ユーザーフォームを起動した時点で、ListBox1には"ABC"、ListBox2には"789"を選択し、青く色がついている状態にすることは可能でしょうか。 よろしくお願いします。

  • リストボックスについて

    リストボックスからデータを転記したいのですが、 実行時エラー"1004"が出てしまい、どうしてもうまくいきません。 どなたか原因を教えてください。 Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Dim i As Long With Worksheets("sheet2") i = .Range("F47").End(xlUp).Row + 1 .Range(i, 6).Value = ListBox1.List(ListBox1.ListIndex, 0) .Range(i, 12).Value = ListBox1.List(ListBox1.ListIndex, 1) .Range(i, 26).Value = ListBox1.List(ListBox1.ListIndex, 2) .Range(i, 28).Value = ListBox1.List(ListBox1.ListIndex, 3) .Range(i, 34).Value = ListBox1.List(ListBox1.ListIndex, 4) .Range(i, 37).Value = ListBox1.List(ListBox1.ListIndex, 5) End With Unload Me End Sub

  • 【エクセル】オプションボタンにセルの値を反映させるには

    エクセルマクロ初心者です。教えてください。 シート2 の あるセルの値が A のとき シート1上の オプションボタン1がtrueになる。 シート2 の あるセルの値が A以外のとき シート1上の オプションボタン1がfalseになる。 (オプションボタン1はフォームコントロールのオプションボタンです。) という結果になるマクロの登録方法を模索していますがうまくいきません。 実際には、シート1は入力シートで、ボタンクリックで別の蓄積シートに転記(オプションボタンのほかコンボボックスなどの内容を転記します)。シート1上のリストボックスに蓄積シートの内容を表示し、選択するとその内容を呼び出すようにしたいのです。 コンボボックスやテキストボックスに呼び出すところまではなんとか本を見たりしてできたのですが、オプションボタンに呼び出せません。 なんとかお知恵をお借りしたいです。 よろしくおねがいします。 *下記のようにやってみました。 Private Sub commandbutton3_click() Dim n As Integer n = ListBox1.ListIndex If n = -1 Then MsgBox "選択してください" Else ComboBox2.Value = ListBox1.List(n, 0) ComboBox3.Value = ListBox1.List(n, 3) ComboBox4.Value = ListBox1.List(n, 4) ComboBox5.Value = ListBox1.List(n, 8) ComboBox6.Value = ListBox1.List(n, 9) ComboBox7.Value = ListBox1.List(n, 1) ComboBox8.Value = ListBox1.List(n, 2) TextBox3.Value = ListBox1.List(n, 10) End if ***********ここからがうまくいきません******** If Worksheets("入力シート").ListBox1.List(n, 6).Value = "A" Then OptionButton1.Value = True Else OptionButton("A").Value = False End If End Sub

  • エクセルマクロ_上書き(リストボックスでデータを抽出し、その行へ上書き)

    エクセルマクロ初心者です。(2003使用_ユーザーフォーム,リストボックス,テキストボックス,チャックボックス) Sheet1のデータをユーザーフォームへ反映させ、修正したものをその行へ上書きするマクロを作成したいと思っていますが、うまくいかないのでどなたかお教え願います。 (Sheet1―A8より表がはじまります) 管理番号 品名 数量 希望納期 変更数量 完納 コメント アカ12 みかん     40   8月3日 アオ35 りんご     30   8月5日 クロ54 なし     50   7月7日 アカ98 もも     20   9月1日 アオ43 すいか     35   8月3日 ●完納の行がチャックボックスで、チェックがついたら、”完納”と記載、チェックがついていなかったら空欄のまま。もし表に”完納”と記載されていたら、コマンドボタン1でデータを抽出した時に、チェックがつくようにしたいのです。が、まったくうまくいかないのです。 ●また、コマンド1での抽出データに値を入力したものを上書きすることは一部できるのですが、空欄にしたときに、空欄の状態(無記入)に上書きすることができません。 Private Sub UserForm_Initialize() Dim r As Range Set r = Sheets("Sheet1").Range("A8").CurrentRegion.Offset(1) Set r = r.Resize(r.Rows.Count - 1) With ListBox1 .ColumnWidths = "50;50;0;0;0;0;0" .ColumnCount = 7 .RowSource = r.Address(A8, G) End With End Sub Private Sub CommandButton1_Click() If ListBox1.ListIndex <> -1 Then TextBox1.Value = ListBox1.List(ListBox1.ListIndex, 0) TextBox2.Value = ListBox1.List(ListBox1.ListIndex, 1) TextBox3.Value = ListBox1.List(ListBox1.ListIndex, 2) TextBox5.Value = ListBox1.List(ListBox1.ListIndex, 4) TextBox6.Value = ListBox1.List(ListBox1.ListIndex, 6) End If If Not IsEmpty(ListBox1.List(ListBox1.ListIndex, 3)) Then TextBox4.Value = Format(CDate(ListBox1.List(ListBox1.ListIndex, 3)), "m/d") Else TextBox4.Value = "" End If End Sub Private Sub CommandButton2_Click() If ListBox1.ListIndex <> -1 Then Dim r As Range ' 元データの範囲を取得 Set r = Sheets("Sheet1").Range("A8").CurrentRegion.Offset(1) Set r = r.Resize(r.Rows.Count - 1) ' 日付型かどうかをチェック If IsDate(TextBox4.Value) Then ' 選択されたセルの更新 r(ListBox1.ListIndex + 1, 4) = TextBox4.Value End If r(ListBox1.ListIndex + 1, 7) = TextBox6.Value End If End Sub Private Sub CheckBox1_Click() If ListBox1.ListIndex <> -1 Then Dim l As Range Set l = Sheets("Sheet1").Range("A8").CurrentRegion.Offset(1) Set l = l.Resize(l.Rows.Count - 1) If CheckBox1.Value = True Then l(ListBox1.ListIndex + 1, 5).Value = "完納" If CheckBox1.Value = False Then l(ListBox1.ListIndex + 1, 5).Value = "<>" End If End If End If End Sub すみませんが、ご親切に教えていただけましたら幸いです。 よろしくお願いいたします。

  • リストボックスから複数行を選択し、その複数のデータをセルに入力したい

    Excel2003でマクロをつくっています。シートのB列を右クリックすると、リストボックスが表示され 任意1行を選択するとシートのB列、C列、D列のセルにデーターが入力されます。 Private Sub ListBox2_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ’シートが保護されていたら保護を解除 If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If ActiveCell.Value = ListBox2.List(ListBox2.ListIndex, 0) ActiveCell.Offset(0, 1).Value = ListBox2.List(ListBox2.ListIndex, 1) ActiveCell.Offset(0, 2).Value = ListBox2.List(ListBox2.ListIndex, 2) ActiveSheet.Protect End If End With Unload UserForm3 End Sub このリストボックスから複数の行を選択し、シートのB列、C列、D列のセルにデーターを入力したいのですが、Multiselectプロパティを変更しても、一行のみしか入力できません。 上のコードをどうかえたらよろしいでしょうか。

  • リストボックスで選択した一行を一度にセルに入力したい

    Xcel2003でマクロ作成中です。以下のコードで、リストボックスで一行を選択しました。この選択した一行のデータのうち2個のデータをC列とD列に入力することができました。が、E列にもデータを入力したいのです。が色いろやってみましたができません。 Private Sub ListBox2_Click() With ListBox2 If .ListIndex = -1 Then MsgBox "項目を選択してくだい" Else ActiveCell.Value = ListBox2.list(ListBox2.ListIndex, 0) ActiveCell.Offset(0, 1).Value = ListBox2.list(ListBox2.ListIndex, 1) End If End With Unload UserForm3 End Sub 上のコードにどう追加記入したらよろしいでしょうか?

  • VBからExcel上の処理をするプログラムを作成しています。

    VB初心者です。 今、VBの画面からExcelを起動させて、一連の処理をした後、 またVBの画面に自動的に戻るようなプログラムを作成しようとしているのですが、 Excelのシートを削除する時に、ダイアログボックスが開いてしまい、そこで処理が止まってしまいます。 ダイアログボックスを開かないようにするとか、自動的にOKボタンを押したことにするとか、 何か方法があったら教えてください。

  • Excel VBA ListBoxについて

    お世話になります。 Excelで以下のようなフォーム画面を作成しております。 1.フォーム画面には、リストボックス、テキストボックス、登録ボタンを設定 2.リストボックスには、Sheet1のデータが表示される。 3.リストボックスのレコードを選択すると、選択した値がテキストボックスに表示される。 4.登録ボタンをクリックすると、テキストボックスのデータが、Sheet1に反映される。 今1~3まではできましたが、4で悩んでおります。 テキストボックスの値を取得してセルに反映させようと以下のコードを書きました。 'リストボックスで選択したレコード数 ListNo = Me.ListBox1.ListIndex 'TextBox1の値を、Sheet1のセルにセット Sheets("sheet1").Cells(ListNo, 1).Value = Me.TextBox1.Value  これを実行すると、何故かここから3のリストボックスのレコードをクリックしたイベントを呼びます。 Private Sub ListBox1_Click() クリックしてもいないのですが、Private Sub ListBox1_Click() を呼ばないようにしたいので、 ListBoxをEnableプロパティをfalseにしても、呼んでました。 呼びにいかない方法をご教授いただけますでしょうか。 よろしくお願いいたします。

専門家に質問してみよう