• 締切済み

Excel VBAでユーザーフォームだけ表示したい

Excel VBAでユーザーフォームを作成し、ファイルを起動時にSheetを非表示にしてユーザーフォームのみ表示させるようにしました。 そうしたところ、 (1)実行ボタンをクリックすると作成されるExcelファイルも表示されなくなる (2)終了ボタンをクリックするとユーザーフォームを含むExcelファイルだけが閉じるのではなく、Excelのアプリ自体が終了してしまう(実行ボタンで作成したExcelファイルは表示したままにしたいのに閉じてしまう) という現象になってしまいました。 某書籍を参考にしてコードを書いたのですが、なぜかこのようになってしまいました。 ※「★」が書籍に指示があった箇所です。 <ThisWorkbook> Private Sub Workbook_Open() Application.Visible = False '★ myForm.Show '★ myForm.MultiPage1.Value = 0 'マルチページ構成のため End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) '========== [×]ボタン,[Alt]+[F4]キーを無効にする ========== Dim msg As String, title As String msg = "[画面を閉じて終了する]ボタンから終了してください。" title = "終了方法" Dim res As Integer Select Case CloseMode Case vbFormControlMenu res = MsgBox(msg, vbOKOnly + vbCritical, title) Cancel = True End Select ActiveWorkbook.Save '★ Application.Visible = True '★ Application.Quit '★ End Sub 実行したいのは、 (1)ユーザーフォームを含むExcelファイルを起動したときは、起動時にユーザーフォームだけが表示されるようにしたい  ※ワークシートを非表示としたい (2)「実行」ボタンをクリックすると、プログラムが実行されExcelファイルが新規で作成され表示される  ※上記で記載した「★」の部分をコードをコメントアウトしてユーザーフォームから実行ボタンをクリックすると、プログラムが実行され正常にExcelファイルが新規で作成されることは確認済みです。 (3)ユーザーフォームが閉じても、ユーザーフォームのExcelファイルのみ閉じ、新規で作成されたExcelファイルは閉じない。  ※実行ボタンをクリックして新規ファイルを作成しなかったり、他にExcelファイルがなかった場合は、Excelは終了する。 それとあわせて、 (1)を実行できた場合に、再度コードを編集する時はどうしたらExcelの画面が表示できるのか教えて下さい。  ※それとも表示できないのでしょうか? 作成締め切りが迫っていて焦っています。 お知恵のある方どうかお力添え下さい。 よろしくお願い致します。

みんなの回答

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

#3、お礼欄へのレスです。 > 追記いただいたコードを実行してみたところ、終了しては「マクロを有効にしますか?」の画面が表示される・・・という繰り返しになってしまいました。 Excel 2000、2003、2010、と3つの環境で、セキュリティレベルを変えながら動作確認していますが、 ご指摘のような状況は再現できませんでした。 原因を特定することはできませんが、他のイベントプロシージャを間接的に呼び出していたり、 何かしら、こちらから見えない記述が影響しているものと思われます。 > 実現したいことは「閉じたらその選択したものだけ閉じる」「開いたときはユーザーフォームだけが表示される」というごくシンプルなことなのです。 はい、#3は専ら、そのシンプルな要求に必要最低限の手数でお応えしたものです。 (Private Sub CommandButton99_Clickは保険のようなものです。) 動作の確認方法として、#3の記述を新規のブックに貼り付け、ユーザーフォームとコントロールを追加して 試してみては、、、と思います。 #3でも書きましたが、こちらとしては奨めるものでもないので、 諦めるのでしたら、特に返信頂かなくても結構ですが、 その場合は、本件質問を未解決のまま締切にしてください。 お役に立てなかったようで、すみません。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

#1、2、cjです。 #2補足欄へのレスです。 > ご提供いただいたコード「 ' ThisWorkbook モジュール  '  8521223」を実行したところ > 「実行時エラー '1004 'Rows' メソッドは失敗しました '_Global'オブジェクト」エラーになってしまいました。 Rowsのように親オブジェクトを省略して書いた場合は、ActiveWorkbookのActiveSheetのRowsという意味になりますから、 #1の説明でいうと、この部分、 >> ActiveWorkbookとしては捉えられない(=非表示の)ブックオブジェクトが対象ですから、 >> ThisWorkbook、とか、(ThisWorkbook モジュールに書く場合は)Me、とか、明示的に指定してください。 要は、 【"Active"なオブジェクト配下のオブジェクトを捉える】 【表示されている[ブック、シート、セル範囲、等]を捉える】 等の、暗黙の意味付けを持たせてある省略表記をひとつひとつ、 【ブック.シート.セル範囲】のようにきちんと階層を踏んで書換えてあげれば、そのようなエラーは起こりません。 例えば、   ThisWorkbook.Sheets("シート名").Rows(index)   Workbooks("ブック名").Sheets("シート名").Rows(index) のように書く、ということです。 オブジェクトを明示的に指定することは、 これからも頻繁に必要になるであろう非常に重要な基本のひとつです。 > シートを非表示というか、ファイルを開くとユーザーフォームだけが表示されるようにしたいのです。 そうですか。まだ今一つ、目的や意図、求める結果が掴めていませんが、 #1で提示したものは違う、ということなのでしょう。 例えば、Excel以外のアプリケーションは一切起動していない場合、 ファイルを開くと、デスクトップ上にユーザーフォームだけが表示されるようなイメージでしょうか? ご質問でご提示のコードを基にすれば、、、。 現在のようにユーザーフォームをモーダル表示している場合は、 ユーザーフォームを閉じたタイミングでアプリケーションウィンドウを再表示する為には、 ユーザーフォームを表示する一連の処理の直後に   Application.Visible = True '◆ を書き加えるだけでいいです。 ユーザーフォームを閉じた時に、ThisWorkbookを閉じる命令をする場合には、 Workbook_Open()プロシージャを最後まで実行した後に、ThisWorkbookを閉じる ように順番を意識した工夫が必要です。 ここでは、Application.OnTimeメソッドを使った例を簡単に提示します。 ThisWorkbookモジュールの記述が実行される順番はこうなるように書いてあります。   Application.Visible = False ↓   myForm.Show ↓   Application.Visible = True ↓ 条件によっては   Me.Close SaveChanges:=True 通常は、myForm.Showを実行中に様々な処理をしています。 (myForm表示中は、ずーっとmyForm.Showの行の処理を実行中、なのです) なので、myForm.Showを実行中にThisWorkbookを閉じてしまうと、 以降の処理に進んではくれません。 そこで、待機中の処理スケジュールを実行してから、ThisWorkbookを閉じるようにする為に、   Application.OnTime Now, "ThisWorkbook.CloseMe"    '◆ ThisWorkbookを閉じる。 のように、閉じる方法を工夫します。 (本当はApplication.Quitの方も同様に処理するのがベターで、私は必ず実践していますが、  QA掲示板では触れないのがお約束?みたいなので、ここでは割愛しています。) ' ' /// ' ' ThisWorkbook モジュール Private Sub Workbook_Open()   Application.Visible = False '★   myForm.MultiPage1.Value = 0 'マルチページ構成のため '◆ 必要ない気もしますが、この記述が先でないと意味ないです。   myForm.Show '★   Application.Visible = True '◆ End Sub Private Sub CloseMe()   Me.Close SaveChanges:=True '◆ ThisWorkbookを閉じる。上書き保存したくない場合はFalse End Sub ' ' /// ' ' myForm モジュール Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) '========== [×]ボタン,[Alt]+[F4]キーを無効にする ==========   Dim msg As String, title As String   msg = "[画面を閉じて終了する]ボタンから終了してください。"   title = "終了方法"   Dim res As Integer   If CloseMode <> vbFormCode Then '◆     res = MsgBox(msg, vbOKOnly + vbCritical, title)     Cancel = True     Exit Sub '◆ 以降の行の処理を実行したくないという意図だと思うのですが、その場合の記述。   End If '◆ ''  ActiveWorkbook.Save '★ ? この記述で何をしたいのかはこちらでは解りません   Dim wbk As Workbook   For Each wbk In Workbooks '◆ Workbooks総当たり     If Not (wbk.Name = ThisWorkbook.Name Or UCase(wbk.Name) Like "PERSONAL.XLS*") Then Exit For   Next   If wbk Is Nothing Then '◆ ThisWorkbook以外にWorkBookが開かれていなければ     Application.Quit '★ Applicationを終了   Else '◆ ThisWorkbook以外にWorkBookが開かれていれば     Set wbk = Nothing '◆     Application.OnTime Now, "ThisWorkbook.CloseMe"    '◆ ThisWorkbookを閉じる。   End If End Sub ' ' /// 私個人の考えとして、Application.Visible = Falseを扱うのは、 絶対にエラーを出さない(エラー時にプロジェクトを終了させない) という前提でしか書けるものではありませんから、 非常時の対策が面倒という意味で他人に奨めるものではないのです。 一応、こちらの立ち位置だけは理解して貰いたい、というだけのことで、 ご要望に応えた物を書くこと自体は、差支えありません。 ただ、やはり心配なので、 #1でも提案したように、緊急避難用に ボタンを用意(目立たない所に配置)しておくことをお勧めしておきます。 ' ' /// ' ' myForm モジュール Private Sub CommandButton99_Click()   Application.Visible = True   Me.Hide End Sub ' ' /// > 本を見たらそれができると書いてあったので。 > ただ、本の通りに実行したら質問に記述したとおり、 本に書いてあれば間違いない、というものではないでしょうし、 目的や条件などを十分に考慮した上で、応用するのは思ったより難しかった、というようなことでしょうね。 > ボタンをクリックすると作成されるファイルまで非表示になってしまい > (最小化もされていないが、バックグラウンドでは開いている様子)、 > 結果を見ることができません。 > また、ユーザーフォームを閉じると、Excelのアプリケーション自体が終了してしまい、 > 他のファイルが開いていてもそれも終了してしまうので、 > ユーザーフォームのファイルだけが終了するようにしたいというのが希望です。 一通り解説策は示せたものと思っています。 以上です。

minminwamidori
質問者

お礼

「Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 」に追記いただいたコードを実行してみたところ、終了しては「マクロを有効にしますか?」の画面が表示される・・・という繰り返しになってしまいました。実現したいことは「閉じたらその選択したものだけ閉じる」「開いたときはユーザーフォームだけが表示される」というごくシンプルなことなのです。いろいろご迷惑をおかけしてしまい申し訳ございませんでした。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

#1、cjです。 原稿を投稿時に要約して再構成している内に、 おかしな文章を上げてしまいました。 > ユーザーフォームをモーダル(排他的)表示した場合は、 > コマンドバーのボタン(又はクイックアクセスツールバー)に頼るぐらいしか無いのではないかと。 > それでは心許ない、というか、カスタマイズされた環境でしか出来ないことになってしまいます。 結果的に間違った内容になっています。 ユーザーフォームをモーダル(排他的)表示したまま、 「ユーザーフォームを介してのコードによる操作」以外の方法で、 VBEを新たに開くなどの方法は、なかったように記憶しています。 (予めVBEを開いておいて最小化してあればタスクバーから再表示できますし  裏ワザ的なネタはあるといえばあるのですが) 今回回答の趣旨からしても、不要な説明になっていますので、 上記3行については撤回、とさせてください。 最後のサンプル、.Hideメソッドを使い方、とかは、役に立つんじゃないかな?と思っていますけれど。 失礼しました。

minminwamidori
質問者

補足

いつもありがとうございます。ご提供いただいたコード「 ' ThisWorkbook モジュール  '  8521223」を実行したところ「実行時エラー '1004 'Rows' メソッドは失敗しました '_Global'オブジェクト」エラーになってしまいました。シートを非表示というか、ファイルを開くとユーザーフォームだけが表示されるようにしたいのです。本を見たらそれができると書いてあったので。ただ、本の通りに実行したら質問に記述したとおり、ボタンをクリックすると作成されるファイルまで非表示になってしまい(最小化もされていないが、バックグラウンドでは開いている様子)、結果を見ることができません。また、ユーザーフォームを閉じると、Excelのアプリケーション自体が終了してしまい、他のファイルが開いていてもそれも終了してしまうので、ユーザーフォームのファイルだけが終了するようにしたいというのが希望です。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 シートを非表示というオーダーですが、 ブック内のすべてのシートを非表示にすることは不可能ですから、 代りにブックのウィンドウを非表示にします。 (※ブックが複数のウィンドウをもっている場合もあります。   その場合はすべてのウィンドウを非表示にするようループさせてください) ウィンドウがひとつであれば、   Me.Windows(1).Visible = False という記述で非表示に、   Me.Windows(1).Visible = True で再表示されます。 因みに、ウィンドウを非表示にした状態で、ブックを保存すれば、 次に開いた時にも非表示の状態は維持されますのでWorkbook_Openイベントからの ブックのウィンドウを非表示にする処理は、設計次第では必要ない場合もあるのかも知れません。 しかし、Excelメニューの[表示]タブから簡単に[再表示]出来てしまいますから、 見られては困る内容ならば、ブックの保護を組み合わせた方がよいのかも知れません。 その場合のサンプルとしては以下のような書き方になります。 後述の本題のコードではブックの保護を扱っていませんので、 必要なら.Windows(1).Visible = の前後の行に追加修正してください。 その際は、記述の順番を間違えないように注意することと、 ActiveWorkbookとしては捉えられない(=非表示の)ブックオブジェクトが対象ですから、 ThisWorkbook、とか、(ThisWorkbook モジュールに書く場合は)Me、とか、明示的に指定してください。 Sub ブックのウィンドウ非表示()   Me.Windows(1).Visible = False   Me.Protect Password:="1234", Structure:=True, Windows:=True End Sub Sub ブックのウィンドウ再表示()   Me.Unprotect Password:="1234"   Me.Windows(1).Visible = True End Sub また、そもそもシートを表示させないブックということなら、 アドインブック(*.xla、*.xlam)として保存しておくのが一般的なので、 通常のマクロ有効ブックを開いてシートが見えないのは、 慣れた人でも驚いてしまうかも知れませんから、理解を得るよう工夫した方が好いとも思います。 ' ' /// お望みのものとは違うかも知れませんが、 直接的な返答として現状に役立ちそうな記述を以下並べてみます。 ' ' /// ' ' ThisWorkbook モジュール  '  8521223 Private Sub Workbook_Open() ' '  Application.Visible = False '★   Me.Windows(1).Visible = False '◆   myForm.MultiPage1.Value = 0 'マルチページ構成のため '◆ 必要ない気もしますが、この記述が先でないと意味ないです。   myForm.Show '★ モーダル表示の場合は、myForm を閉じるまで次の行に進みません。 End Sub ' ' /// ' ' myForm モジュール  '  8521223 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) '========== [×]ボタン,[Alt]+[F4]キーを無効にする ==========   Dim msg As String, title As String   msg = "[画面を閉じて終了する]ボタンから終了してください。"   title = "終了方法"   Dim res As Integer '  Select Case CloseMode '  Case vbFormControlMenu ' フォームの閉じるボタンから閉じようとした場合は  ◎ '    res = MsgBox(msg, vbOKOnly + vbCritical, title) '    Cancel = True '  End Select   If CloseMode <> vbFormCode Then '◆ コード(自作のボタンのイベント)からUnLoadした場合以外は  ◎     res = MsgBox(msg, vbOKOnly + vbCritical, title)     Cancel = True     Exit Sub '◆ 以降の行の処理を実行したくないという意図だと思うのですが、その場合の記述。   End If '◆ ''  ActiveWorkbook.Save '★ ? この記述で何をしたいのかはこちらでは判りません   Dim wbk As Workbook   For Each wbk In Workbooks '◆ Workbooks総当たり     If Not (wbk.Name = ThisWorkbook.Name Or UCase(wbk.Name) Like "PERSONAL.XLS*") Then Exit For   Next   If wbk Is Nothing Then '◆ ThisWorkbook以外にWorkBookが開かれていなければ ''    Application.Visible = True '★     Application.Quit '★ Applicationを終了   Else '◆ ThisWorkbook以外にWorkBookが開かれていれば     Set wbk = Nothing     With ThisWorkbook '◆ ThisWorkbookについて       .Windows(1).Visible = True '◆ Windowを再表示する       .Close SaveChanges:=True '◆ 閉じる。上書き保存したくない場合はFalse     End With '◆   End If End Sub ' ' /// 他、 > (1)を実行できた場合に、再度コードを編集する時はどうしたらExcelの画面が表示できるのか教えて下さい。 >  ※それとも表示できないのでしょうか? ユーザーフォームをモーダル(排他的)表示した場合は、 コマンドバーのボタン(又はクイックアクセスツールバー)に頼るぐらいしか無いのではないかと。 それでは心許ない、というか、カスタマイズされた環境でしか出来ないことになってしまいます。 ブックのウィンドウを再表示するコード自体は前述のように至って簡単ですが、 権限によって再表示の可否を制限する必要があるなら、以下のような感じにします。 この例では、仮に、CommandButton99 を クリックした場合、のイベントプロシージャに書いていますが、 UserForm_QueryClose イベント内の記述、res = MsgBox()を工夫して、 resの値で条件分岐してみるのもいいかも知れません。 (ユーザー目線で、パスワードを探りたくなるような目立つ設計を奨めるつもりではありませんけれど。) ブックの保護と関連付ける場合は前述のサンプルを参考にして下さい。 ' ' /// Private Sub CommandButton99_Click()   Dim vRtn   Const ADMIN_PASS = "1234" '◆ ぱすわーど任意に指定   vRtn = Application.InputBox(Prompt:="パスワードを入力", Title:="管理者用編集モード")   If vRtn <> ADMIN_PASS Then Exit Sub   ThisWorkbook.Windows(1).Visible = True   Me.Hide End Sub ' ' /// 因みに、パスワードを扱うなら、 VBAProjectを保護しておくのが、比較的簡単でより堅くなるとは思います。 以上です。

関連するQ&A

  • エクセル ユーザーフォームの位置

    ブックを閉じた時のユーザーフォームの位置を、次回ブックを開いた時に同じ位置で表示したいです。 以下のコードでユーザーフォームは閉じれないようになっています。 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = vbFormControlMenu Then Cancel = True End If End Sub この場合でも、前回と同じ位置でのユーザーフォームの表示は可能でしょうか? 可能な場合はどのようにしたらいいでしょうか?

  • ユーザーフォームの切り替えについて・・・

    UserForm1とUserForm2の2つのユーザーフォームがあります。 UserForm1の中にあるcommandButton1をクリックすると、UserForm2が表示される仕組みになっています。 (ちなみに、UserForm2にもコマンドボタンがあり、クリックするとUserForm1に戻るようになっています) UserForm1の方に、 Private Sub CommandButton1_Click() UserForm2.Show 0 Unload UserForm1 End Sub UserForm2の方に、 Private Sub CommandButton1_Click() UserForm1.Show 0 Unload UserForm2 End Sub と記述してあります。 ところが、それぞれのユーザーフォームには、閉じると同時にブックが閉じるように Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) ActiveWorkbook.Save 'ブックを保存 ActiveWorkbook.Close 'ブックを閉じる Application.Quit 'excelを終了 End If End Sub というコードを記述しているため、UserForm1からUserForm2へ移るときにブックが閉じてしまいます。 右上の「×」を押したときだけブックを閉じるようにしたいのですが、どういうコードを書いたらいいのですか? 宜しくお願いします。(*´Д`人)

  • ExcelVBAユーザーフォームの終了方法

    ExcelVBAのユーザーフォームについて教えて下さい。 マルチページで作成し、アイコンをクリックしてファイルを開くと、マルチページのみが表示される仕様にしました。 <ThisWorkbook> Private Sub Workbook_Open() Application.Visible = False UserForm.MultiPage1.Value = 0 UserForm.Show End Sub そして、マルチページ内にボタンを配置して、そのボタンをクリックすると、マルチページが終了するとともに、マルチページが埋め込まれているExcelファイルを(他のExcelファイルが動作中はそれらは何もしないでそのまま)閉じたいのです。 <UserForm> Private Sub CommandButton_Click () Dim msg As String, title As String msg = "プログラムを終了します。よろしいですか?" title = "終了確認" Dim res As Integer res = MsgBox(msg, vbYesNo + vbInformation, title) If res = vbYes Then Unload Me End Sub と書いてみました。 マルチページの画面はExcelの作業画面なしに開きます。ボタンをクリックするとマルチページが終了します。 ですが、「マルチページが閉じてExcelの作業画面も表示されず、一見終了したように見えるが、タスクマネージャーのプロセスではEXCEL.EXEが動作している」ことがあったり(他にExcelファイルを開いていないときも同様です)、「マルチページ終了後にExcelの何もない作業画面が表示」されます。そのファイルを閉じてもよいのですが、せっかくマルチページで、単独のアプリのようにしているので、マルチページを閉じて、Excelを閉じて…という、二度手間的なことはしたくないと思っています。 マルチページに配置したボタンをクリックしただけで、マルチページを終了させ、マルチページが埋め込まれているExcelのみも正常に終了させることはできますでしょうか? ご教授頂きたくお願い致します。 ちなみに「×」ボタンでの終了はNGとしています。

  • ExcelVBA:フォームの閉じるボタン「×」を消す方法

    ExcelVBAで、ユーザーフォームの閉じるボタン「×」を使用できなくなる方法は以下のコードで教わったのですが「×」自体消す方法ってあるでしょうか? Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = 0 Then Cancel = 1 End Sub 回答よろしくお願いします。

  • エクセル97でのユーザーフォームについて

    エクセル97でのユーザーフォームについて教えて下さい (1) まず最初にユーザフォームを作成しました。 (2) エクセルオープン時にメニューバーにボタンを追加し、そのボタンを押すと   ユーザーフォームが表示されてくるという風に考えました。 ユーザーフォームは表示されるのですが、フォームに配置されているボタン等を 押してもまったく利きません(本来はメッセージが表示される) アクティブにはなっているようなのですが... Private Sub UserForm_Activate() End Sub 上のアクティブになった時に何か処理をもりこまなければいけないのでしょうか? 初歩的な質問で申し訳ないのですが、宜しくお願い致します。

  • EXCEL VBAのユーザーフォームに引数を渡す方法について

    すいません、EXCEL VBAのユーザーフォームに引数を渡す方法についてご質問があります。 シート上にコマンドボタンを2つ用意する。 コマンドボタン1を押すと変数mは1 コマンドボタン2を押すと変数mは2 としてユーザーフォームを呼び出す。 Public m As Integer Private Sub CommandButton1_Click()  m = 1  Call フォーム呼び出し(m) End Sub Private Sub CommandButton2_Click()  m = 2  Call フォーム呼び出し(m) End Sub Sub フォーム呼び出し(m As Integer)  UserForm1.Show End Sub 次にユーザフォームにコマンドボタンを1個置き、 ボタンを押したとき、mが1であれば「ボタン1」 mが2であれば「ボタン2」 とメッセージボックスを出し、ユーザーフォームを閉じる。 Private Sub CommandButton1_Click()   If m = 1 Then    MsgBox "ボタン2"   ElseIf m = 2 Then    MsgBox "ボタン2"   End If  Unload UserForm1 End Sub プロシージャ間の引数渡しは色々なテキストに載っているのですが ユーザーフォームに引数を渡す方法はどうも見つからず、 Private Sub CommandButton1_Click(m) としても、コンパイルエラーとなってしまいます。 よろしくご教示をお願いいたします。

  • エクセルVBA ユーザーフォームのボタン

    ユーザーフォームにCommandButton1があります ワークシートにもCommandButton2があります ユーザーフォーム上のCommandButton1をクリックすることで、ワークシート上のCommandButton2をクリックするという命令は作れるのでしょうか? ワークシート上のCommandButton2をクリックした後の命令は出来ているのですが、そのコードをコピーしてユーザーフォーム上のCommandButton1のコードにコピーするしかないのでしょうか? 実行ボタン(CommandButton2)をワークシートに作成したので、 ユーザーフォームで入力→ ユーザーフォーム上のボタン(CommandButton1)をクリック→ ユーザーフォームは終了→ ワークシート上の実行ボタン(CommandButton2)をクリック してくれると良いかと思いました よろしくお願いします

  • フォームのボタンからのみexcelを終了したい

    おねがいします。 都合上、フォームのボタンからだけexcelを終了したのです。 Private Sub CommandButton1_Click() Application.DisplayAlerts=False Application.Quit End Sub それに伴い、 右上のexcelのxボタン、シートのxボタンを無効化または非表示にしたいです。 Private Sub Workbook_BeforeClose(Cancel As Boolean)      If CloseMode = 0 Then     Cancel = 1   End If End Sub これで、エクセルxボタンは無効になりましたが、 フォームからの終了も出来なくなってしまいました。 フォームからのみ終了する方法を教えてください。

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

    エクセル初心者です。 自分のユーザーフォーム(住所、商品登録)を作りたくて大変困ってます。 下記は、ネットなどをみて貼り付けたのですが、上手くいきません。 まず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]呼び出したユーザーフォームのみを消すには

    「main」というユーザーフォームがあります。 フォーム内には「呼出」というボタンが配置されていています。 これを押すと「sub.show」が実行されて、subというユーザーフォームも表示されます。 この状態でsubフォームの[x]ボタンを押すと、mainフォームも消えてしまいます。 mainフォームを消さずにsubフォームのみを消すにはどうすればよいでしょうか。 それと、このような質問のカテゴリーはプログラミング内の「Visual Basic」と「その他」のどちらが適切でしょうか。

専門家に質問してみよう