• ベストアンサー

Excel ユーザーフォームをモードレスで表示後

Excel 2000を使用しています。 ユーザーフォームをモードレスで表示後すぐ、ワークシートの操作が可能なように ワークシートをクリックしたのと同じような効果を与える、やり方ってありますか? ユーザーフォームは、アクティブセルとその周辺のセルの値を使った計算の結果 を表示するのがメインで、できればマウスでクリックしない限り前面に出てきてほしくない のです。 ユーザーフォームのActivateイベントルーチンに、アクティブでないセルをActivateしたり、 Selectしたりするコードを挿入してみましたが、効果ありませんでした。

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

UserFormのActivateイベントに AppActivate Application.Windows(1).Cacption と記述します 複数のブックを開いているのでしたら Windows(1)を修正する必要があります 呼び出し側のSheetのイベントで if UserForm1.Visible = false then   UserForm1.Show vbModeless End If といった具合に非表示または未表示の場合だけ Showメソッドを実行 としてやればいいようですよ

doara_2011
質問者

お礼

取りあえず、家のExcel2010で試してみたところ、成功しました。 完璧です。明日、本番のExcel2000で実施してみたいと思います。

doara_2011
質問者

補足

Excel2000で実施したところ、当初はうまくいきませんでした。 試行錯誤の結果、UserFormのActivateイベントに AppActivate Application.Caption を記述することに落ち着きました。 みなさま、ありがとうございました。

その他の回答 (3)

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

珍しい質問なので、意味がよく理解できないが。もう少し丁寧に説明してもらえないかな。 下記のようなことか? Sheet1のSelectionChangeイベントに Private Sub Worksheet_SelectionChange(ByVal Target As Range) UserForm1.Hide If Target.Column = 3 Then UserForm1.Show vbModeless End If End Sub C列を選択したときだけ、UserForm1.フォームを表示(セル範囲にして狭めることもたやすい。Intersect利用) C列以外を選択したらUserForm1 を隠す。 ーー UserForm1にTextbox を1つ貼り付け Userform1のUserForm_Activateイベントに Private Sub UserForm_Activate() Me.TextBox1.Text = ActiveCell.Offset(0, 1) + ActiveCell.Offset(1, 1) '勝手な例、直ぐ右列の同行とその下セルの和表示例 End Sub

doara_2011
質問者

補足

imogasiさんのプログラムだと、C列にカーソルがアクティブになると ユーザーフォームが表示されますよね。表示されること自体はいいのですが、 そのあと、キーボードの制御がユーザーフォームの方に行ってしまい、キーボード によるワークシート上のセルの移動ができなくなってしまいます。そうではなくて、 フォームの表示後も、ワークシートをわざわざクリックすることなく、キーボード でワークシートのアクティブセルを移動させたいのです。 フォームでやらせたいことは、もっと計算は複雑ですが、imogasiさんの書かれて いるようなことです。DreamyCatさんへの補足にも書きましたが、ユーザーフォーム を表示後、ユーザーにワークシートをクリックしてもらえば済むことなんですが、 そのひと手間を省きたいと考えております。 なんかVBAでできないことの一つみたいに思えてきましたが、引き続き回答をお願い します。

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

Excel2003で試したところ 以下でWorkbookのほうがアクティブになりました。 実際には、workbooks("ブック名").sheets("シート名").cells(列,行).select で指定したほうが間違いがなくていいと思いますが。 Private Sub UserForm_Activate() Cells(1, 1).Select End Sub

  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

どうしたいのかよくわかりませんが 参考にして工夫してください。 どこかのセルを選択すると非表示に、セル上で右クリックすると表示するようにしてあります。 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Cancel = True  UserForm1.Show False ' Cancel = False End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) UserForm1.Hide End Sub

doara_2011
質問者

補足

ユーザーフォームを非表示にしたい訳ではありません。 むしろユーザーフォームは、あくまでも表示したままにしたいです。 通常にユーザーフォームを表示後は、ユーザーフォームが最前面にあって、 ワークシートを操作できませんよね? 僕の希望はフォームを表示後、 ワークシートを最前面に持ってきて、何もしなくてもワークシートを操作 できるようにすることです。 フォームを表示後にワークシートをユーザーにクリックしてもらえばよい だけのことですが、その一手間を省きたいというのが狙いです。 勘違いさせて申し訳ありませんでした。こんな説明でよろしかったでしょうか? 以上、よろしくお願いします。

関連するQ&A

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

    現在、ワークシートの内容を見やすくするためにユーザーフォームを使用し表示させています。印刷は、ユーザーフォームにコマンドボタンを配置し、ワークシートを印刷しています。 せっかくユーザーフォームで見やすいレイアウトにしているので、表示させた内容をユーザーフォームごと印刷できればと考えています。 画面のハードコピーとかではなくて、コマンドボタンをクリックすることで印刷したいのですが、どなたか教えてください。

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

    ユーザーフォームを作成して、ワークシートのデータを帳票形式に表示しています。 これを閲覧だけ可能にして、ユーザーフォームから編集できないようにするにはどのようにすればよいのか教えて下さい。

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

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

  • エクセル ユーザーフォーム ワークシート表示

    現在,マクロを勉強中です。 ユーザーフォームに,3つのラベルを設定し,それぞれのラベルをクリックすると,「初期設定」または「4月」または「5月」のシートを表示し,ユーザーフォームは消すというものを試みています。 シート名は,「初期設定」「4月」「5月」です。 1つめのラベルをクリックしたときに実行されるコードは Sub Label1_Click() Sheets("初期設定").Activate Unload Me End Sub で設定したのですが,ユーザーフォームが消えるのですが,何のシートも表示されません。 実行したいことだけを考えると,ハイパーリンクでも可能なのですが,勉強もかねて質問させていただきたいと思います。 どこか修正すべきコードがありましたらご教授くださるとありがたいです。

  • エクセルVBAでグラフ表示

    エクセル2002使用です。 ユーザーフォームを作り、そこにコマンドボタンを置いています。コマンドボタンをクリックすると、ワークシート上にあるグラフを表示したいのですが・・・ Private Sub CommandButton1_Click() Charts("Graph4").Select Charts("Graph4").Activate End Sub 問題が2つ出てしまいました。 1.ワークブック内でシートは切り替わるのですが、グラフがユーザーフォームの後ろに隠れてしまったままでユーザーフォームの手前に表示できない。 2.グラフ(シート)を表示した後、ユーザーフォームに戻る方法がわからない。 ユーザーフォームからシートにあるグラフを表示させたい場合は、どのような方法がベストなのでしょうか?できれば、ユーザーフォーム上ですべてを行いたいのですが、グラフ作成のコードも新たに作らないと駄目なのでしょうか? 質問の仕方も難しく説明不足かもしれませんが、よろしくお願いします。

  • エクセルVBA ユーザーフォームの終了について

    エクセルVBAでユーザーフォームを作成しています。 コマンドボタンにVBAマクロを割り当てしているのですが 思うように動いてくれないので質問します。 コマンドボタンをクリックしたら望む動作 1、ワークシートを選択 2、その後、ユーザーフォームを消す。 と言う動作にしたいのですが、2の ユーザーフォームを消す方法、書き方が分かりません どなたか教えていただけないでしょうか 1の動作は以下のように書いています。その後の書き方を お願いします。 Private Sub CommandButton8_Click() ブック名 = "VBA演習" シート名 = "sheet1" Workbooks(ブック名 & ".xls").Worksheets(シート名).Activate End Sub (ユーザーフォームの名前は"テストフォーム"としてます)

  • ユーザーフォームの表示

    マクロでユーザーフォームを作成しました それをワークシート上に表示させたいのですが方法がわかりません ネットで調べてみるとShowメソッドを使うとありますがやり方がイマイチわからないのです。 どなたかわかりやすく解説して下さい

  • そのシートだけのユーザーフォーム

    ユーザーフォームをあるワークシートだけ表示してるときに機能させたいのですがどのようにすればいいのですか? 違うシートを開いたときにはユーザーフォームを実行できないようにして、できれば違うシートを選択した時にはユーザーフォームを消せればいいのですが。

  • ユーザーフォームにワークシートの内容を表示したいのですが

    エクセル2003を使用しています。 ユーザーフォームを利用してワークシートの内容を表示させたり変更したりすることを考えています。方法はプロパティーのControlSourceにセル番地を書いてあります。 複数のシートがあり1つのシートにつき1件のデータです。 作業したいシートをアクティブにしてユーザーフォームを表示させると、前回作業した内容のままでユーザーフォームが表示されてしまいます。 一度消して再表示するとアクティブシートの内容を表示します。 このような状態なのですが、当然最初からアクティブシートの内容を表示させることが希望です。改善策はありますでしょうか。

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

    ユーザーフォームに入力後ワークシートへ転記されるのですが、そのカーソルがワークシート側に行ってしまいます。連続して入力したいのですが、ユーザーフォームにもどるようにするにはどうしたらよいのでしょうか? 教えて下さい。よろしくお願いいたします

専門家に質問してみよう