• ベストアンサー

監視ウインドウの常時表示

エクセルVBAを使って、一つのブックにある複数のシートを監視しています。 この監視シートのウインドウは常時優先的に開いておきたいのですが、他のシートの処理をするときにアクティブウインドウが変わってしまいます。どういうプログラムを組めばよいのでしょうか。よろしくお願いします。

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

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

NazeTarouさん、こんばんは。 毎日、一度はここをチェックしていました。私は、一応、すべてExcelで管理されていますから、気になる質問は、ダイレクトで閲覧できるようにしています。締めない限りは、半年先でも1年先でも、ここに戻ってこられるようにしています。 >Copyができないとありましたが、 私も思い違いでした。単に、Copy Destination が出来ないだけでした。一旦、クリップボードに入れればよかっただけでした。 >フォームをイニシャライズ後変化するシートの内容を常時反映するにはどのようにするのでしょうか。 このようにしてみたらいかがでしょうか?Worksheet_Changeイベントがよいのか、Worksheet_SelectionChangeイベントが良いのか分りませんが、中身は同じはずです。一瞬、貼り付けの時のタイム・ロスがありますが、それほど気になるものではないと思っています。 もしかしたら、不備な点があるかもしれませんから、何度か、チェックしてみてください。また、Sheet1 のUsedRangeというのは、不可抗力で広がることがありますから、もし、範囲が特定できるようでしたら、Endメソッドを使って範囲を取るようにすればよいと思います。 '<シートモジュール> Private Sub Worksheet_Change(ByVal Target As Range)   Application.ScreenUpdating = False   Worksheets("Sheet1").UsedRange.Copy   With UserForm1.Spreadsheet1    .Cells.Range("A1").Paste    .Cells(1, 1).Select   End With   Application.CutCopyMode = False   Application.ScreenUpdating = True End Sub '<Userform モジュール> Private Sub UserForm_Initialize()   Application.ScreenUpdating = False   ActiveWorkbook.Worksheets("Sheet1").UsedRange.Copy   With Spreadsheet1    .Cells.Range("A1").Paste    .Cells(1, 1).Select    Application.CutCopyMode = False    .DisplayTitleBar = False 'タイトルバーなし    .DisplayToolbar = False 'ツールバーなし   End With   Application.ScreenUpdating = True End Sub 'もちろん、UserFormを立ち上げるときは、モードレスモードです。 Sub UserFormShowing()  UserForm1.Show 0 End Sub

NazeTarou
質問者

お礼

Wendy02さんNazeTrouです。遅くなりましたが、昨日今日とサンプルコードを参考にしてやっと所期の目的を達するプログラムの改造を終わりました。  おかげでメモ帳にアウトするより処理過程が随分スッキリしました。心からお礼申し上げます。Wendy02さんから随分勉強をさせていただきました。今後の一層のご活躍を祈念いたしております。

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

その他の回答 (1)

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

こんにちは。Wedny02 です。 #1684946 から、こちらに来ました。 一番、簡単なのは、Webコンポーネントのスプレッドシート・コントロールで開けっ放しにするのが一番簡単なのですね。Excel.Applicationのフレームからは、独立しています。 まず、Webコンポーネントがあるかどうか調べてください。 VB Editor 画面で開いたら、  挿入-ユーザーフォーム(なれていれば、ツールバーのユーザーフォーム・アイコン)  表示-ツールボックス (なれていれば、同じくスパナとハンマー・アイコン) ツールボックスをセレクトして、 右クリック-その他のコントロール クリック 利用可能なコントロール を見ていきます。 Microsoft Office Spreadsheet xx (xx は数字) があるかと思います。それに、チェックを入れると、ツールボックスに、緑の×のついたシートのアイコンが現れるかと思いますから、それをユーザーフォームに貼り付けてください。大きさは、スクロールが利きますから、常時出しておくのに都合のよう大きさに整えてください。 Webコンポーネントがない場合は、 Microsoft の「ダウンロード」サイトからダウンロードしてください。(文末参照) ユーザーフォーム起動のボタンなどを、どこか、シートモジュールに、ひとつ置いてください。 例えば、 Private Sub CommandButton1_Click()  UserForm1.Show False End Sub そして、ユーザーフォームモジュールには、 例えば、このようにします。配列を使う必要はないのですが、あまり、Initialize中に、シートそのものとのやり取りを繰り返すのは、うまくありません。また、通常のCopy コマンドは利きません。 Private Sub UserForm_Initialize() Dim ArVal As Variant Dim i As Long, j As Long  ArVal = ActiveWorkbook.Worksheets("Sheet1").UsedRange.Value  uc = UBound(ArVal, 2)  ur = UBound(ArVal, 1)  For i = 1 To ur   For j = 1 To uc   Spreadsheet1.Cells(i, j).Value = ArVal(i, j)   Next j  Next i With Spreadsheet1  .DisplayTitleBar = False 'タイトルバーなし  .DisplayToolbar = False 'ツールバーなし End With End Sub ワークシートとはそっくりですが、行は、65536までですが、列が、AA~ZZまであります。 --------------------------------------- Office Online ダウンロード Web Components Office 2003 http://www.microsoft.com/downloads/details.aspx?familyid=7287252C-402E-4F72-97A5-E0FD290D4B76&displaylang=ja Web Components Office 2002 http://www.microsoft.com/downloads/details.aspx?FamilyID=982B0359-0A86-4FB2-A7EE-5F3A499515DD&displaylang=ja

NazeTarou
質問者

お礼

Wedny02さんいつもながら行き届いたご回答有難うございます。 公私とも取り込み中で、サンプルをやっと試させてもらいました。 本格的な応用はこれからですが、取り急ぎお礼申し上げます。  新たに分からない点が出てくると思いますが、宜しくお願いいたします。

NazeTarou
質問者

補足

Wedny02さんお元気ですか。NazeTarouです。やっと懸案の仕事にかかれます。  サンプルのコードの趣旨は実行してよく理解できました。実用に移す上でキーポイントの質問をさせてください。  フォームをイニシャライズ後変化するシートの内容を常時反映するにはどのようにするのでしょうか。Copyができないとありましたが、見当をつけることもできません。よろしくお願いいたします。

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

関連するQ&A