[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別のエクセルブックが選択されていてもユーザーフォームが動くようにしたい』(ららら)
ユーザーフォーム作成初心者ですが、本やネットで勉強しながらユーザーフォーム上でエクセルのデータを編集するマクロを作成中です。
下記の問題で困っています。
どなたかご教授お願い致します。
エクセルを複数開きながら作業をすることが多い為、ユーザーフォームはモードレスで開いています。
(作成中のエクセルの名前を『テスト』としておきます。またユーザーフォームは複数個あります)
しかし、別のエクセルを選択している時でも『テスト』内にあるユーザーフォームのボタンだけは操作できるため、
ボタンを押してしまうと
実行時エラー'9' インデックスが有効範囲にありません
のエラーになってしまいます。
別のエクセルを選択している状態でも、ユーザーフォームのボタンを押せば『テスト』のエクセルがアクティブになり、
操作できるようにするにはどのようにすればいいのでしょうか?
エクセル名前は変わることがあるのでWorkbook_Open()のタイミングでActiveWorkbook.Nameで名前を取得してみても
その後、どのようにマクロを組んでいいのかが分かりません。
どなたかご教授お願い致します。
< 使用 Excel:Excel2013、使用 OS:Windows8 >
複数の EXCEL が開く環境であれば、処理を特定できる指定の仕方をしたほうが良いと思います。 例えば、Data シートの A1 を指定するのであれば、 With ThisWorkbook.WorkSheets("Data") MsgBox .Range("A1").Value End With
とすれば、Excel がいくつ開いていても、マクロの置かれたブックの Data シートが対象 となります。
上記は MsgBox ThisWorkbook.WorkSheets("Data").Range("A1").Value としても同じです。
どうしてもアクティブシートにしたいのであれば、テストボタンを押した処理の先頭に ThisWorkbook.Activate WorkSheets("対象のシート名").Activate 等を書けばできないでしょうか。
(Mook) 2015/01/19(月) 17:41
教えた頂いたものは『テスト』エクセルを選択している状態の時にだけ、実行される書き方という認識でよろしいでしょか。
もし、前回質問させて頂いたような操作方法が難しいとすると、追加の質問となってしまいますが、例えば他のエクセルからユーザーフォームのボタンをクリックしたときにでる
実行時エラー'9' インデックスが有効範囲にありません
のエラーがでるタイミングで、
MsgBox "『テスト』エクセルを選択してから実行してください"
のような表示をだすことはできるのでしょうか?
作業する時には使っていないエクセルを閉じるのが一番いいのはわかっているのですが、1台のPCを共有して使っていることもあり、勝手に他のエクセルを閉じれないのが現状です。
また、今回作成しているものは複数人で使う予定のもので、中にはPC操作が苦手な方もいらっしゃいますので、他のエクセルが最小化されている場合など、気が付かないことあります。
なるべく操作の制限を付けず、エラーのタイミングで注意表示が出るようにしたいです。
(ららら) 2015/01/20(火) 09:29
上記を試してみたでしょうか。
>ThisWorkbook.Activate はマクロの書かれたブックをアクティブにする処理
>WorkSheets("対象のシート名").Activate はアクティブなブックの対象シートをアクティブにする処理
です。 ですので、複数ファイル外開いているなど、どのような状態であっても 想定する状況にしたうえで、処理を行おうとするものです。
何が選ばれていても、表示を変えず、処理をするのであれば先にも書いた様に 相対参照(現在アクティブなものを対象に処理する)ではなく 絶対参照にする方法もあります。
何が良いかは、マクロを作成・運用する方が考慮・選択すべきことだと思います。
まずは、試してみてください。 (Mook) 2015/01/20(火) 11:34
大変失礼いたしました。
出来ました!!
わかりやすい説明、ありがとうございました。
(ららら) 2015/01/20(火) 13:25
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.