- ベストアンサー
マクロ ボタンに名前をつける
- シート1に29個のボタンがあり、ボタンを押すとシート2やシート3のページをアクティブにして表示するマクロを作成しました。
- シート2のI2のテキストを引用してボタンに名前を付けるマクロを作成しましたが、シート2のI2が必ずしも広告事業収入であるとは限らないため、引用せずにボタンの名前にするマクロに変更しました。
- 不要な部分を削除しました。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Worksheets.Countでそのブックのワークシート数が取得できます。 それを利用して以下のようにするとワークシート枚数に応じて横に8個づつ並べて表示する事が出来ます。 Sub ボタン設置3() With Worksheets(1) For i = 1 To (Worksheets.Count - 1) nX = 145 * (1 + ((i - 1) Mod 8)) nY = 90 * (1 + Int(i / 9)) .Buttons.Add(nX, nY, 140, 20).Text = Worksheets(i + 1).Range("I2").Value Next i End With End Sub
その他の回答 (3)
- keithin
- ベストアンサー率66% (5278/7941)
ん? あぁ、シート2じゃなくて2枚目のシートですね。前のご相談で教わっていた事ですよ。 sub 2枚目のシートのボタン作成() dim s as string s = worksheets(2).range("I2").value with activesheet.shapes(application.caller).textframe.characters .text = s .font.name = "MS Pゴシック" .font.size = 11 end with worksheets(2).name = s end sub
お礼
ご回答ありがとうございました。
- mt2008
- ベストアンサー率52% (885/1701)
これ↓で作ったボタンに名前を付けるという事でしょうか? http://okwave.jp/qa/q8983229.html でしたら、作った後に名前を付けるのではなく、作るときに名前を付けた方が良いでしょう。 先のサンプルでは1から連番の名前を付けています。 Sub Sample() With Worksheets(1) For i = 1 To 29 .Buttons.Add(50 * i, 10, 30, 20).Text = Worksheets(i + 1).Range("I2").Value Next i End With End Sub
補足
回答者様のやり方をすることにしました!ご提案ありがとうございます! そこで、質問なのですが、 「ボタンを横一列に並べるのではなく、8個ずつ並べて3段にする」ように変更しました。 目次を除けたシートは、23枚なので、1段目、2段目は8ずつ並べることができたのですが、 3段目は7個であるため、エラーになりました。 3段目のボタンを付けるマクロの時に、 For i = 1 To 8 を For i = 1 To 7 に変えれば大丈夫だとは思うのですが、 今後もシートの枚数が1、2枚変更する予定があるので、 最後のボタンを作成するマクロに 「シートが終わるまでボタンをつける」や「シートが終わればボタンはそれ以上作らない」 といったような指示もしたいと考えています。 よろしければ、下記のマクロに付け加えていただければ嬉しいです。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Sub ボタン設置3() With Worksheets(1) For i = 1 To 8 .Buttons.Add(145 * i, 90, 140, 20).Text = Worksheets(i + 17).Range("I2").Value Next i End With End Sub
- keithin
- ベストアンサー率66% (5278/7941)
sub シート2のボタン作成() dim s as string s = worksheets("Sheet2").range("I2").value with activesheet.shapes(application.caller).textframe.characters .text = s .font.name = "MS Pゴシック" .font.size = 11 end with worksheets("Sheet2").name = s end sub エクセルには「フォーム」と「アクティブXコントロール」の2種類のコマンドボタンがあります。それぞれ使い方も書くべき具体的なマクロも違ってくるので,あなたが今どちらを使っているのか,また寄せられた各回答がどちらを前提にしているのか,間違えないようによく気をつけてください。
お礼
ご回答ありがとうございます。 こちらの質問が稚拙で分かりにくく失礼いたしました。
補足
実行してみましたが、エラーになってしまいました。 デバッグ?では s = worksheets("Sheet2").range("I2").value がエラー対象のようです。 こちらが最初に提示したマクロが間違っていたのだと思いますが、 どのようにしたら良いのかご教授願います。
お礼
ご提案とご回答本当にありがとうございました! 回答者様のやり方で、一気に作業ができ、感謝しております。 やってみたところ、順番が少しいれ変わるボタンがあったのですが、 自分で考えてみます! また質問することがあると思いますので、その際には 助言いただけますと幸いです。 本当にありがとうございました!