エクセル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(*.*)が使えなくて困っています・・・
宜しくお願いします。
A 回答 (6件)
- 最新から表示
- 回答順に表示
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回どこかに記述するだけで
>全てのボタンに反映させる方法はありませんか?
たぶん、コード全体を見れば、教えることは出来るだろうと思います。しかし、それは、ご質問者さんからしたら、遥か上の技術という可能性があるということだと思うのです。それさえも、ちょっとした技術の応用で、簡単にクリアする可能性もあります。とはいえ、たかだか、数十行を省略したところで、この場合は、全体には変化ないだろうから、現状の技術で可能なら、それはそれとして使う方法もアリだと思うのです。高望みしても、高値の花ということもありますしね。
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するときの引数にすること。
以上です。
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
No.3
- 回答日時:
ナニをやっているのかよくわかりません
各コマンドボタンで実行するコードに
シートを指定してやる処理があるという事でしょうか?
シート名を変数に格納する動作はたとえばBookOPENイベントで行うとか、
対象となるシート名が確定した時点でそれを行えばいいのです
End Withでひっかかるとありますが
エラーメッセージには何とありますか?
With ~ End With 無いのコードでIf文を使っていませんか?
End Ifを忘れるとそうなりますよ!
No.1
- 回答日時:
??
言っている意味がよくわかりません
この回答への補足
Dim ooo as worksheet
set ooo = Thisworkbook.worksheets("test")
with ooo
end with
の記述を現状はコマンドボタン毎に記述しています。
これを簡略化したいのですが方法はありませんか?
もう一つ補足をさせてください。
言葉の使い方が間違ってるかもしれませんが、
全てのプロシージャに
Dim ooo as worksheet
set ooo = Thisworkbook.worksheets("test")
with ooo
end with
を反映させたいです。
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
BorlandC++Builderでのタイマー...
-
閉じると「+」になり開くと「-...
-
vb.netでdatagridの中に選択ボ...
-
VBA CommandButtonの文字ずれ
-
他フォームのクリックイベント取得
-
VBS でユーザーからいくつかの...
-
回数のカウント
-
バックスペース機能の作り方
-
アイコンとボタンの違い
-
Excel VBA Application.caller...
-
フォームの再読み込み
-
[Excel VBA]コマンドボタンの入...
-
VB.net でトグルボタンを実現し...
-
アセンブリコードの表示
-
VBAのボタンの位置が変わって困...
-
VBAで多数のプログラムを一つの...
-
リストボックス 何も洗濯され...
-
ユーザフォーム AfterUpdate処...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームに別シートか...
-
VBA CommandButtonの文字ずれ
-
フォームの再読み込み
-
アイコンとボタンの違い
-
VBAのボタンの位置が変わって困...
-
閉じると「+」になり開くと「-...
-
Excel VBA Application.caller...
-
Access VBA でデータペーストを...
-
セルをマクロのボタンにしたい。
-
コマンドボタンやイメージにマ...
-
VBAでオプションボタンによって...
-
ボタンをマウスで押し続けたと...
-
[Excel VBA]コマンドボタンの入...
-
VBA IE ダウンロード ダイアロ...
-
プロシージャからイベントをコ...
-
チェックボックスで指定出来る...
-
+ボタンの名称は?
-
VBA でのボタンの移動について
おすすめ情報