• 締切済み

ブックの起動時に

お世話になります。 以前同じような質問をしたものです。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1931836 今回もまた同じような問題が発生してしまいました。 前回でブックの起動時にあるフォルダ内のファイル名をボタン上に表示させるという処理を完成させることはできたのですが、 今回は、ボタン上に表示させたファイル名のセルの値を表示させる(ブックは開かずに)という処理で行き詰っています・・・ ***ボタンのあるブックとセルの値を取得するブックは別もの 手順1:ブック1にフォルダ名をボタン上に表示させる 手順2:フォルダ名の表示されたボタンをクリックさせブック2を開く      1)フォルダ内にあるファイル名がボタン上に表示される      2)ボタン上に表示されたファイルのセルの値を表示させる 手順2の段階で Auto_Open()でフォルダ内のファイル名を取得し、ボタン名にし、そのボタンに表示されたファイル名を使って Application.ExecuteExcel4Macro('パス\[ブック名]!セル番地') で取得させようとしているのですが、ブックの起動時にボタン名は取得してもセルの値は取得されません。 また、Auto_Openのでボタン名を取得させ、そのあとにWorkbook_Open()でセルの値を取得させようとしましたがうまくいきませんでした。 ちなみに手順1→手順2とせず、単独で手順2のみを実行すると思うような結果が返ってきます。 うまく説明できずに申しありませんが、どなたかご教授よろしくお願いいたします。

みんなの回答

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

こんにちは。Wend02です。 もう少し、理路整然とご自身のされていることをまとめられたら、解決が早いと思います。 前回の質問に戻りますが、 >手順1のブックで >Application.Run macro:="個人情報.xls!Auto_Open()" >としているのですが、 >これを'Application.Run macro:="個人情報.xls!Workbook_Open()" >とするのは無意味なのでしょうか? 両方とも、意味がありませんね。単に、ブックを開くだけでいいわけですから、Workbooks.Open "個人情報.xls" でよいわけですし、それに、コードが間違っていますから、エラーが出てくるはずだと思います。 >  手順3:Book2を閉じもう一度、手順1を行う。 外部ブックから取り出すなら、一旦、Excelのアプリケーションから解放してあげなくては取れませんね。結局、呼び出して、ブックを開けているだけですからね。 だから、 Application.ExecuteExcel4Macro('パス\[ブック名]!セル番地') これ自体も、ムダなんですね。ブックを開けて、値をとるなのなら、別に、このようなことをしなくても、ブックの場所の値を取ればよいのですから。

miammi
質問者

お礼

Wendy02様 いろいろとご教授ありがとうございました。 整理をし、もう一度やり直してみます。

miammi
質問者

補足

Wend02様 アドバイスありがとうございます。 >外部ブックから取り出すなら、一旦、Excelのアプリケーションから解放してあげなくては取れませんね ということから手順2で表示後いったんbook2が持つ情報をを解放してあげようと考え情報を探しているのですが、このような考えではいけないのでしょうか? またなかなか良いサンプルなどが見つからないので何かご存知でしたら教えていただけないでしょうか。 何から何まで頼りきってしまって放蕩に申し訳ありません。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 ちょっと返事が遅くなってしまって申し訳ありません。 >>Workbook_Openに統一させて、Call で、標準モジュールにて、分けて仕事させたほうが良いような気がしますね。 >これを'Application.Run macro:="個人情報.xls!Workbook_Open()" >とするのは無意味なのでしょうか? それをする以上は、複数のブックや、他の言語で行っているという意味ですから、それは、私の予想の範囲にはありません。私は、全体の構成とか見せられておりませんので、それで、それを良し悪しすることは、私には不可能です。 これは、あくまでも一般的なアドバイスですから、それがうまくいかないのなら、それは無視してください。ご自身のやりやすい、または、うまくいっている方法でおやりください。

miammi
質問者

補足

Wendy02様アドバイス本当にありがとうございます。 アドバイスを元にいろいろと試してみましたところセルの情報は取ってくるようになったのですが、なぜか以前の情報しか取得してきません 例)手順1:Book1でAというファイル名のボタンをクリックする →   手順2:Book2をOpen時、Aのセルの値を取得してくる(成功かと思ったのですが・・・) →   手順3:Book2を閉じもう一度、手順1を行う。   この際Bというファイル名をクリックする →   なぜかAファイルの情報が表示される・・・ 対策としては閉じる前などにパス名やボタン名を格納している変数などをクリアしているのですが、うまくいきません。 なにか回避方法はご存知でしょうか 本当に頼みごとばかりで申し訳ないのですが、何かアドバイスがございましたらよろしくお願いいたします。  

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。Wendy02です。 ちょっと見落としていたので、回答が遅くなってしまいました。 前回も同じようなことを書いたけれども、かなりリスキーな設計だなって思います。私なら、ComboBox やListBox を使うだろうなって思うけれどもね。 >Application.ExecuteExcel4Macro('パス\[ブック名]!セル番地') どこで覚えられたのかしらね(^^; myVal = Application.ExecuteExcel4Macro _ ("'" & パス & "\" & シート名 & "'!R" & 行番号 & "C" & 列番号) ということになりますね。R1C1方式です。 >また、Auto_Openのでボタン名を取得させ、そのあとにWorkbook_Open()でセルの値を取得させようとしましたがうまくいきませんでした。 まあ、どちらでもよいような気はしますが、それをするなら、Workbook_Openに統一させて、Call で、標準モジュールにて、分けて仕事させたほうが良いような気がしますね。Auto_Openは、起動からワンテンポ遅れるから、それで、ボタン名を表示させるっていうのは、ちょっとヘンですね。

miammi
質問者

補足

Wendy02様 返事が遅くなってしまい申し訳ありません。 毎回アドバイス本当に感謝しております。 >Workbook_Openに統一させて、Call で、標準モジュールにて、分けて仕事させたほうが良いような気がしますね。 とのアドバイスを受け行ってみたのですが、手順2の際にうまく表示されません・・・ 手順1のブックで Application.Run macro:="個人情報.xls!Auto_Open()" としているのですが、 これを'Application.Run macro:="個人情報.xls!Workbook_Open()" とするのは無意味なのでしょうか? アドバイスのとおり実行する場合はこのような記述は必要なく単純にサブルーチンを持たせ、Workbook_Open()でメイン作業を行わせるということなのでしょうか? 一度開いた情報が残っているみたいなのでいったんクリアしたりもしてみたのですが・・・ お手数をおかけいたしますがご教授のほどよろしくお願いいたします。

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

関連するQ&A