• 締切済み

エクセルVBA:全部のコマンドボタンに反映させる方法。

エクセルVBA:全部のコマンドボタンに反映させる方法。 コマンドボタンにVBAを記述してフォルダを開いたり、 ブラウザを立ち上げたりしています。 現在の状態ですと、 そのコマンドボタン毎にwithの記述をしています。 ボタンが十個ある場合、↓の文を10回書いています。 Dim ooo as worksheet set ooo = Thisworkbook.worksheets("test") with ooo ***中身の記述 end with これを10回かかずに、1回どこかに記述するだけで 全てのボタンに反映させる方法はありませんか? public sub で記入して callで呼び出しても end with で終わってしまうため、 .cell(*.*)が使えなくて困っています・・・ 宜しくお願いします。

みんなの回答

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

あくまでも、一般論ですが、最近、OkWaveで同じパターンの質問が増えてきたようですが、それで、質問が成立するのか、私には分からなくなってきました。何か典型的な質問パターンなので、少し様子を見させていただいています。 >Dim ooo as worksheet >set ooo = Thisworkbook.worksheets("test") >with ooo > >***中身の記述 end with >.cell(*.*)が使えなくて困っています・・・  カッコの中は、,(カンマ)であるのはいいとしても、実際の問題は何なのか良く分からないのです。使えないって、 With Worksheets("Test")  MsgBox .Cells(1,1).Value End With で問題があるわけないし、まさか、こんなことで、Public じゃなくて、グローバル変数や変数をモジュールスコープにしてやる必要なんて、よほど凝ったコード(または、バカの一つ覚え)でなくてはしませんね。 Public objSh As Worksheet Sub Test1() Set objSh = ThisWorkbook.Worksheets("Test")  Call Test2 Set objSh = Nothing End Sub Sub Test2()  MsgBox objSh.Cells(1,1).Value End Sub こういうのは、間が抜けています。人にもよりますが、通常、こうしたオブジェクトをグローバル化しないはずです。 Sub Test1R()  Worksheets("Test").Select  Call Test2 End Sub Sub Test2R()  MsgBox Cells(1,1).Value End Sub 単に、こうすればよいだけです。 そもそも、こんなコードなら、Call するか、ということを突っ込まれてしまいます。 Test2Rは、エラーが発生するというのは、少し、認識不足で、それは、モジュールの問題です。標準モジュールを使うということで良いわけです。 おそらく、ここの質問者の質問パターンとしては、自分が認めるコード以上は内容をみせないだろうから、こんな所しか言えません。OkWaveの回答者をみれば、半分以上は、素人コードを出しているのだから、必要以上に隠す必要はないとは思うのです。中には、他人のコードでエラー回避さえ、気に入らないという人たちもいるのですから、その回答者の実力は何をかいわんやというところです。 しかしながら、よかったら、全体の見せられるところ、エラーが出る所ぐらいは見せてほしいものです。 でも、本質的に、こんな問題ではないと思うのです。 >これを10回かかずに、1回どこかに記述するだけで >全てのボタンに反映させる方法はありませんか? たぶん、コード全体を見れば、教えることは出来るだろうと思います。しかし、それは、ご質問者さんからしたら、遥か上の技術という可能性があるということだと思うのです。それさえも、ちょっとした技術の応用で、簡単にクリアする可能性もあります。とはいえ、たかだか、数十行を省略したところで、この場合は、全体には変化ないだろうから、現状の技術で可能なら、それはそれとして使う方法もアリだと思うのです。高望みしても、高値の花ということもありますしね。

すると、全ての回答が全文表示されます。
  • myRange
  • ベストアンサー率71% (339/472)
回答No.5

ちょと分かりにくい質問であることは確かです。。。(^^;;; >全てのプロシージャに > Dim ooo as worksheet > set ooo = Thisworkbook.worksheets("test") > with ooo > end with >を反映させたいです。 これは、10個のボタンにはそれぞれの機能があるが、 上記の部分は共通しているのでひとつにしたい ということですか? ですね? であれば、質問者の試した、 >public sub で記入して、callで呼び出し でいいと思うのですが、 >end with で終わってしまうため、 >.cell(*.*)が使えなくて困っています・・・ これ、具体例が挙げてないのでよく分かりません。 この部分をも少し具体的に補足してみたらどうでしょう。 共通部分を共通部分というプロシージャにして。。。 下記は全てボタンの配置してあるシートのシートモジュールに書く。 '-------------------------------- Private Sub 共通部分()   Dim ooo As Worksheet   Set ooo = ThisWorkbook.Worksheets("test")   With ooo     *************   End With End Sub '---------------------------------------- '---------------------------------------- Private Sub CommandButton1_Click()   Call 共通部分   ボタン【1】の固有コード End Sub '--------------------------------- Private Sub CommandButton2_Click()   Call 共通部分   ボタン【2】の固有コード End Sub '---------------------------------    ●以下同様。。。。 '--------------------------------- 但し、共有する変数はモジュール変数にするか、 Callするときの引数にすること。 以上です。  

すると、全ての回答が全文表示されます。
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.4

Dim ooo as worksheet set ooo = Thisworkbook.worksheets("test") with ooo end with この4行をコマンドボタン毎に書いているのでなんとかしたいということでしょうか。 たった4行ぐらい全部のコマンドボタンに書いてもたいしたことはないと思うのですが。 どうしてもまとめたいのであれば、 プロシージャを1つにまとめて、各コマンドボタンからそれを呼ぶという方法ではどうですか。 ただ、各ボタンの処理が長いとかえって分かりにくくなります。 こんなことするよりは、ボタンごとに記述したほうが分かりやすいでしょう。 ステップ数の多さよりも読みやすさを重視したほうがいいですよ。 Sub ボタン1_Click() Call ボタン処理(1) End Sub Sub ボタン2_Click() Call ボタン処理(2) End Sub Sub ボタン処理(n As Integer) Dim ooo as worksheet set ooo = Thisworkbook.worksheets("test") with ooo  Select Case n  Case 1   ボタン1の処理  Case 2   ボタン2の処理  Case 3   ・・・・  End Select end with End Sub

すると、全ての回答が全文表示されます。
  • aloha886i
  • ベストアンサー率19% (22/113)
回答No.3

ナニをやっているのかよくわかりません 各コマンドボタンで実行するコードに シートを指定してやる処理があるという事でしょうか? シート名を変数に格納する動作はたとえばBookOPENイベントで行うとか、 対象となるシート名が確定した時点でそれを行えばいいのです End Withでひっかかるとありますが エラーメッセージには何とありますか? With ~ End With 無いのコードでIf文を使っていませんか? End Ifを忘れるとそうなりますよ!

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

Public変数にしやればいいんでないの?

noname#115914
質問者

補足

具体的にはどうすればいいのですか? どうしても end with でひっかかってしまいます・・・

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

?? 言っている意味がよくわかりません

noname#115914
質問者

お礼

もう一つ補足をさせてください。 言葉の使い方が間違ってるかもしれませんが、 全てのプロシージャに Dim ooo as worksheet set ooo = Thisworkbook.worksheets("test") with ooo end with を反映させたいです。 宜しくお願いします。

noname#115914
質問者

補足

Dim ooo as worksheet set ooo = Thisworkbook.worksheets("test") with ooo end with の記述を現状はコマンドボタン毎に記述しています。 これを簡略化したいのですが方法はありませんか?

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

関連するQ&A