• 締切済み

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

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

みんなの回答

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.1

こんにちは。 Win32API関数を使う事になります。 (FindWindow/SetWindowLong/GetWindowLong/DrawMenuBar) ちょうど進行中のスレッドがありますね。 http://excelfactory.net/excelboard/excelvba/excel.cgi?mode=all&namber=103895&rev=0 また、 『E03M130 ユーザーフォームのタイトルバー非表示』 http://homepage2.nifty.com/kmado/kvba.htm など、ここの他のTipsも勉強になると思いますよ。

miya_HN
質問者

お礼

API関数を使わなければいけないんですね。 正直何を書いているのか全く分かりませんでしたが、そのままコピーして動くのでその通りにやろうと思います。 ありがとうございました。

関連する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へ移るときにブックが閉じてしまいます。 右上の「×」を押したときだけブックを閉じるようにしたいのですが、どういうコードを書いたらいいのですか? 宜しくお願いします。(*´Д`人)

  • フォームのボタンからのみ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ボタンは無効になりましたが、 フォームからの終了も出来なくなってしまいました。 フォームからのみ終了する方法を教えてください。

  • ExcelVBA ユーザーフォーム間の変数について

    UserForm1のコントロールボタンbtn1又はbtn2をクリックするとUserForm2を開く。 UserForm1にはテキストボックスtxtN1、txtN2がある。 UserForm2のテキストボックスtxtN3に入力された値をbtnDecideをクリックすると、 UserForm1に自動入力するようにする。 その際btn1をクリックしてUserForm2を開いた場合はtxtN1に、btn2をクリックして開いた場合は txtN2に自動入力されるようにする。 以下のようにコードを組んでみました。 UserForm1のコード Public Number as integer Private Sub btn1_Click() Number = 1 UserForm2.Show End Sub Private Sub btn2_Click() Number = 2 UserForm2.Show End Sub UserForm2のコード Public Number as integer Private Sub btnDecide_Click() If Number = 1 Then UserForm1.txtN1 = txtN3.Text else:Number=2 UserForm1.txtN2= txtN3.Text End If Unload Me End Sub 以上になります。 どうもpublic 変数NumberがUserForm2を開いた段階でリセットされているようなのです。 何かいい方法はありますでしょうか。 教えていただける方がいましたらよろしくお願い致します。

  • ExcelVBAでのユーザーフォームについて

    ご回答ありがとうございました。 これといった資料がなく(探し方が悪いのかもしれませんが)、少ない経験値で複雑なというか面倒な処理のマクロ(VBA)を組まされることになり、困っているところです。当初の話だと「勉強しながらでよい」ということだったのですが、いろいろと仕事が次々と舞い込んできて、そんな余裕もなくせっぱ詰まり少ない知識で必死にやっています。 先にご回答いただいた内容で是非アドバイスをいただきたいと思い、新たに質問させていただきました。 ユーザーフォームでマルチページを作っています。そこでもコンボボックスを使うのですがそこの記述方法をアドバイス下さい。やっぱり記述場所がおかしいのか、クリックするとリストの内容がコンボボックスをクリックした分だけ繰り返してしまうことがあります。 ////////////////////////////////////////////////////// Private Sub UserForm_Initialize() Dim sh As Worksheet Set sh = Worksheets("対象年") Dim i As Integer Dim lastRow As Integer lastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row With ComboBox1 For i = 2 To lastRow If ComboBox1 = "" Then .AddItem sh.Cells(i, 1).Value End If Next i End With End Sub ////////////////////////////////////////////////////// Private Sub ComboBox1_DropButtonClick() Dim sh As Worksheet Set sh = Worksheets("対象年") Dim i As Integer Dim lastRow As Integer lastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row With ComboBox1 For i = 2 To lastRow If ComboBox1 = "" Then .AddItem sh.Cells(i, 1).Value End If Next i End With End Sub ////////////////////////////////////////////////////// とまぁ、結局コードは同じなのですが。 それと、結果をラベルに出させる場合には回答で記述いただいた ////////////////////////////////////////////////////// Private Sub ComboBox1_Change()   Dim vTgYear As Variant   vTgYear = ComboBox1.Value   Label1.Caption = vTgYear - 1 & "~" & vTgYear + 1 & "年" End Sub ////////////////////////////////////////////////////// で、よいでしょうか? よろしくお願いいたします。

  • BVAの<>の文字について

    BVAでマクロを書くときに"<>"の記号をよく見ますが、これはどういった時に使われる記号なのでしょうか。 例を書くと、 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode <> 0 Then MsgBox "「閉じる」ボタンをクリックして下さい" Cancel = True End If End Sub です。 これはUserFormのイベントを書くときに使用したものですが、If CloseMode <> 0 Then の部分の<>次の文字は1や2に変換することが出来ます。 <>に意味は=の意味とほとんど同じなのでしょうか。 よろしくお願い致します。

  • 指定の動作中ユーザーフォーム終了方法

    お世話になっております。 タイトルに書ききれなかったため、詳しく書かせていただきます。 UserForm UserFormA UserFormB UserFormC があります。 UserFormには、UserFormA,UserFormB,UserFormCを起動するための コマンドボタンが配置されています。 UserFormA.Show とかです。 UserFormAは、UserFormB,UserFormCと連携して グラフを作成したりします。 UserFormAのCombobox1には、値が入っており、 UserFormAのCommandButtonを押したら、 UserFormAのCombobox1の値をUserFormBに入れてCommandbuttonを押す、 UserFormAのCombobox1の値を,UserFormC入れてCommandbuttonを押す という動作をしております。 今まで、UserFormを閉じる動作をしたら 「閉じますか?」という確認ウィンドウが出て、 強制的にEndで終わりにしておりました。 ------------------------------------ Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = vbFormControlMenu Then '終了するって書いたら Cancel = Not FP_GetResult If Cancel = 0 Then 'はい を押した場合の判断 With ThisWorkbook.Worksheets("TEST") .Select End With End End If End If '「はい」を押さない場合、終了しない。 Application.ScreenUpdating = True End Sub ' キャンセルするかを確認する処理 Private Function FP_GetResult() As Integer If MsgBox("終了しますか?", vbInformation + vbYesNo) = vbYes Then FP_GetResult = True Else FP_GetResult = False End If End Function ---------------------------------- ただ、今回は大元のUserFormも起動しており、 UserFormは終了させたくありません。(再表示ということでも良いのですが…) If UserForm.Visible = False Then UserForm.Show End If 上記で、UserFormが表示されているか確認はできますが、 Endの前に入れようと、後に入れようと UserForm.showが実行されることはありません。 だからといって、Exit Subを使うと UserFormB,UserFormCの動作を継続して行ってしまいます。 分かりにくいところがあれば追記しますので、 回答をお願い致します!

  • VBA ユーザーフォームの Keypreview について

    いつもお世話になっています。 VBAのユーザーフォーム上で、KeyDown イベントを使いたいのですが、下のコードが動きませんでした。 Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If e.KeyCode = Keys.z Then MsgBox "効いてるよ!" End If End Sub エラー表示も出ません。 ウェブで調べたところ、VBでは「KeyPreview」プロパティーを「true」にすれば解決するという記事をあちこちで見かけましたが、VBA(Excel2003)のユーザーフォームプロパティには、そのような項目が見当たりません。コード上で無理やり設定してみるとエラーになります。 どのようにすれば解決するでしょうか? お知恵をお貸し下さい。

  • 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) としても、コンパイルエラーとなってしまいます。 よろしくご教示をお願いいたします。

  • access フォームについて

    access2003にて登録フォームを作成しています。 このフォーム内に入力したデータを登録ボタンを押し、「登録しますか」のメッセージに 「いいえ」とすれば保存せずにこのフォームを閉じる。 「キャンセル」とすれば保存せずにフォームに戻る。 「はい」とすれば保存して閉じたいです。 しかし、以下の式を実行すると 「いいえ」はバッチリ希望通りに動くのですが、 「キャンセル」をすると保存されてフォームに戻り、 「はい」とすると保存されずにフォームが閉じられてしまいます。 何がまずいのでしょうか・・・。 ----- Private Sub Form_BeforeUpdate(Cancel As Integer) Dim Ret As Integer Ret = MsgBox("登録しますか?" & vbCrLf & " " & vbCrLf & "「いいえ」を選択すると保存せず閉じます", vbYesNoCancel) '「いいえ」を選択したら、保存せずに閉じる If Ret = vbNo Then DoCmd.Close acForm, "振返りデータ", acSaveNo '「キャンセル」を選択したら、保存せずにフォームに戻る Else If Ret = vbCancel Then Else DoCmd.Close acForm, "振返りデータ", acSaveYes End If End If End Sub