• ベストアンサー

Excel VBAでボタンを押しても最新にならない。

ExcelのB1に年、B2に月が入っていたとします。 その状態でボタンを押すと、上記の値が反映されて、カレンダーになるようなユーザーフォームが表示されるようになっているんですが、 ボタンを1度押しただけでは最新状態が表示されません。 例えば、月を変えたときなど。 1度フォームを表示させて、フォームを閉じ、もう一度開くときちんと表示されます。 1度できちんと表示させるにはどうしたらいいのでしょうか?

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

ユーザーフォームには、モーダルとモードレスの2種類があります。 提示のコードは、ユーザーフォームを通常の「モーダル」で表示しています。 モーダルで表示させた場合には、UserForm1.Show 以降に記述したコードは、 そのフォームを閉じるまで実行されません。 従って、このような場合は、UserForm1.Show 以降に記述していたコードを  フォームのInitializeイベントに記述します。 Sub FormOpen()   UserForm1.Show End Sub フォームのデザインモードで空いている部分を右クリックで「コードの表示」を 指定し、開いたコードウィンドウに次のように記述します。 Private Sub UserForm_Initialize()   Me.YearBox.Value = Range("B1").Value   Me.MonthBox.Value = Range("B2").Value End Sub これで如何ですか。 Excel2000以降のバージョンの場合は、モードレスで表示することが出来ますので、 下記のようにモードを指定すると UserForm1.Show 以下コードを連続して実行する ことが出来ます。但しフォームを表示しているとき、シートの操作も出来るように なってしまいます。 Sub FormOpen()   UserForm1.Show (vbModeless)   UserForm1.YearBox.Value = Range("B1").Value   UserForm1.MonthBox.Value = Range("B2").Value End Sub

KODAMAR
質問者

お礼

そういうことだったんですね。 てっきり一緒に実行されるものだと思ってました。 だから1度開いて閉じて、また開いて…をするとできたんですね。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBA オプションボタンのチェックを外したい

    いつもお世話になります。 エクセルで、ユーザーフォームでオプションボタンを使っているのですが、オプションボタンを選択し、ユーザーフォームを消して、もう一度表示させた時に、前に選択したオプションボタンの黒丸が残っている時があるのです。 ユーザーフォームを表示させた時に前に選択した黒丸を消す方法はありますでしょうか?

  • VBAのトグルボタン

    初心者なもので、「なにをこんな」とお思いかもしれませんが、教えてください。 ユーザーフォーム内にトグルボタンを設置しています。当たり前なのですが、一度トグルボタンを押し再度ユーザーフォームを呼び出すとトグルボタンが押された状態のまま表示されます。 理想はトグルボタンを押した状態でユーザーフォームを閉じて、またユーザーフォームを呼び出しても押されていない状態で表示することです。 ネット等でも調べましたが、これというものがなかなかなかったので質問しました。よろしくお願いします。

  • VBAで実行押すまでExcel非表示にしたい

    VBAでユーザフォームを作成しました。 Excelを立ち上げるとExcelシートの前にユーザフォームが出る状態なのですが、 ユーザフォームの実行ボタンを押すまでは非表示にしたいのですが、どのような記述をしたらよいでしょうか? マクロ的に実行ボタンを押すと結果が、Excel上に反映されるので、実行ボタンを押すまで非表示であれば大丈夫です どうか教えてください。

  • Excel VBA ある値が入力されたときだけユーザーフォームを出したいです

    ExcelのVBAを教えてください。 D15は、リストで入力する値を選択できるようになっています。 D15で選択された値によって、B15に反映されるようになっています。 たとえば、 D15の値をリストで105を選んだら、B15に「AAA」と入り、 D15の値をリストで109を選んだら、B15に「ccc」と入ります。 これらは、B15にIF関数が入っていて制御されています。 ところが、D15の値をリストで108と選んだ時だけ、B15に「BBB」と入る場合と「DDD」と入る場合の2パターンあり、これは人間の判断でどちらにするか考えるので、IF関数を使えません。 なので、 D15のリストボックスで108を選んだときだけ、 ユーザーフォームを出し(UserForm1.Show)、ユーザーフォームにBBBとDDDのコマンドボタンがあって、Tabでコマンドを選択し、Enterで確定し(マウスは使いたくない)、確定したコマンドの値をB15に反映させるようにしようと思いました。 ・・・が、ユーザーフォームを出すタイミングのVBAの組み方がわかりません。 D15の値をリストから選択する・・・というのは、他の方が作った仕組みなので変えることはできません。

  • VBAにて『元に戻すボタン』を作りたい

    お世話になります。 当方、EXCEL2003を使用しております。 現在、Textboxに入力した値をエクセルのセルへ代入していく フォームを作成しているのですが、このフォームに『元に戻す』 ボタンを追加したいと考えております。 つまり、ひとたびセルに代入した値を代入される前の状態に戻す 作業をフォーム上から行いたいのです。 正直、vbaの知識はまだあまり持ち合わせておらず、本やネットを 参考に組んでいるレベルです。 どうか、宜しくお願いいたします。

  • エクセルVBAマクロで、一度テキストポックスに入力した値がコピーされて

    エクセルVBAマクロで、一度テキストポックスに入力した値がコピーされてしまう VBAマクロ初心者です。 エクセルVBAマクロで、以下の様なプログラムを作成し計算させていますが、 一度入力した値がテキストポックスに残ってしまい、なんとかならないかなと 思っています。 (1)複数シートにそれぞれコマンドボタンを配置し、クリックすると同じユーザー フォームが立ち上がるようになっています。 (2)そのユーザーフォーム内に、テキストボックスが複数あり、それぞれ値を入力 して計算スタートさせると、ワークシートの1行目から数千行目まで計算して 各行に計算結果を表示します。 (計算は、既に各行に入力済みのデータとこのテキストボックスの値を元に算出されます) (3)次に、別のシートでコマンドボタンをクリックし、ユーザーフォームを立ち上げると、 前のシートで入力した値がそのまま各テキストボックスに入ってしまいます。 (これは、必ず起こる訳ではなく、時々起こるのですが、起こる場合は、コマンドボタン をクリックしてからユーザーフォームが立ち上がるまでの時間が若干短い感じがします) ※一度、上記の計算をさせるとテキストボックスの値がそのシートの特定のセルに入り、 次回ユーザーフォームを立ち上げた際に、テキストボックスに入るようになっています。 (Private Sub UserForm Initialize を使っています) パソコンの構造を、私はよく知らないのですが、おそらく、一度テキストボックスに値 を入力して計算させると、どこかのメモリにそれが残っていて、次にユーザーフォーム を立ち上げた際にそれが入ってしまうのかな、と思っています。 (ただし、もし前の値が入ってしまったとしても、一度そのユーザーフォームを消して から、再度立ち上げると、正常な値(そのシートの特定のセルを参照)が必ず入ります) 何か、プログラムにより、このメモリ?を消す?、あるいはうまく解決する方法など 考えられませんでしょうか? もし、詳しい方がおられましたら、御教示いただけませんでしょうか。 よろしくお願いいたします。

  • エクセル2003VBAにて、

    エクセル2003VBAにて、 ユーザーフォームのラベルへ処理状況を表示したいのですが、 マクロ実行中はユーザーフォームに処理が渡されないのか以下のコードが反映されません。 そこでDoEventsを入れてみたのですが、 やっぱりラベルに以下の文字が反映されません。 どなたかよい解決方法を御存じないでしょうか? 教えてください。よろしくお願いいたします。 DoEvents UserForm1.Label9.Caption = "行数確認中です..."

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

    おはようございます! エクセルVBAにてユーザーフォームを作りました。(通常フォーム以外からの入力をしないように保護してあるので)ファイルを開いたときにまずフォームを立ち上げるのですが、フォームからの値が反映するように下記の通りパスワード解除のボタンを作りました。 Private Sub CommandButton5_Click() Worksheets("○○◎").Unprotect Password:="××" End Sub こんなファイルをweb上で公開して他の人に数値を入力させようと思っている次第なのですが・・・。 PCで作っているときはうまく動作するのですが、webにのせたものだと上記のボタンを押すとエラーになります。 実行時エラー'1004' 'Worksheets'メソッドは失敗しました:'_Global'オブジェクト とでているのですが、これはどういう意味でしょう??? 初心者なもので全く分からず作っています。 どなたか教えて下さい!!! よろしくお願い致します。

  • エクセルVBAで、非表示にしたエクセルが印刷後に表示されてしまう

    Excel97を使用しています。 ブックを開いた時に、Application.Visible = Falseでエクセルを非表示にしてから、ユーザーフォームだけ表示させる設定にしています。 このユーザーフォーム上のボタンで印刷をするのですが、印刷が終了すると、ユーザーフォームの後ろにブックが表示されてしまいます(タイトルバーだけの時もあります)。 しかもユーザーフォームがまだ表示されているのに、エクセルの「閉じる」ボタンが有効になってしまいます。 印刷のコードの前や後ろにもApplication.Visible = Falseを書いてみたのですがうまくいきません。 ブックを常に非表示にしておくにはどうしたらよろしいでしょうか? ご存知の方、どうぞよろしくお願いします。

  • エクセルVBAの質問です。

    エクセルVBAでユーザーフォーム上からセルを選択したいのですが、可能でしょうか? 当初はユーザフォーム上のボタンにRange("a1").selectを入れておき、ボタンをクリックするとA1セルが選択状態になり、キーボードで入力できると思ったのですが、駄目でしたorz とまぁユーザーフォーム上のボタンを押すとキーボードでセルに直接入力ができる状態にしたいです。 アドバイスの程よろしくお願いします!

このQ&Aのポイント
  • 転居先でWi-Fiとの接続ができない問題について、DCP-L2550DWの設定方法やトラブルシューティング方法をご紹介します。
  • Windowsをお使いの方で無線LANで接続したい場合、DCP-L2550DWの設定手順や注意点について解説します。
  • DCP-L2550DWのWi-Fi接続で困っている方へ、ひかり回線を使用しての設定方法やトラブルシューティングについて説明します。
回答を見る

専門家に質問してみよう