アプリ版:「スタンプのみでお礼する」機能のリリースについて

ボタンが1シート目に28個並んでいます。
ボタンには、「あああ」「いいい」など、名前が表記されており、まだ「マクロの登録」を行っていません。

「ボタンをクリックすると、ボタンと同じ名前のシートをアクティブにする」
というマクロを、ボタンに登録したいです。

また、常に28個ボタンがあるというわけではありません。25個や、26個になる場合もあります。


※1シート目にボタンを作り、そのボタンに名前を付ける作業は、
  前回教えていただいた下記のマクロを行いました。

Sub ボタン設置()
With Worksheets(1)
For i = 1 To (Worksheets.Count - 1)
nX = 145 * (1 + ((i - 1) Mod 8))
nY = 30 * (1 + Int(i / 8))
.Buttons.Add(nX, nY, 140, 20).Text = Worksheets(i + 1).Range("I2").Value
Next i
End With
End Sub

質問者からの補足コメント

  • ご回答ありがとうございます。
    教えていただいたマクロを行ってみましたが、

    Worksheets(CInt(Application.Caller)).Select

    の部分でエラーになってしまいます。
    なぜなのかがわかりません。
    もし原因が分かるのであれば、ご教授いただきたいです。
    せっかく教えていただいたのに、また質問してしまいすみません。

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/06/02 15:48

A 回答 (3件)

一例です。



Sub ボタン設置()
Dim i As Long, nX As Long, nY As Long
Dim Obj As Object
'前回のボタン削除
For Each Obj In ActiveSheet.Buttons
Obj.Delete
Next Obj
'ボタン登録
For i = 1 To (Worksheets.Count - 1)
nX = 145 * (1 + ((i - 1) Mod 8))
nY = 30 * (1 + Int(i / 8))
With Worksheets(1).Buttons.Add(nX, nY, 140, 20)
.Text = Worksheets(i + 1).Range("I2").Value
.Name = i + 1
.OnAction = "移動"
End With
Next i
End Sub

Sub 移動()
Dim i As Long, btn As String
btn = Application.Caller
i = CLng(ActiveSheet.Buttons(btn).Name)
Worksheets(i).Select
End Sub
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
参考にいたします。

お礼日時:2015/06/03 11:13

だいぶ苦労されておられるようですが


考え方を変えませんか。
要するにシートが沢山あって移動するのが大変と云う事ですよね。
一案ですが
ユーザーフォームを作成
その中に ComboBoxを一つ作成

Private Sub ComboBox1_Change()
Sheets(ComboBox1.Value).Activate
Unload Me
End Sub
Private Sub UserForm_Initialize()
With ComboBox1
For i = 1 To Worksheets.Count
.AddItem Sheets(i).Name
Next
End With
End Sub
こんな感じで、ユーザーフォームを開く(UserForm_Initialize)と
、シート名を全て取り込む

ComboBoxでシート名を選択すると
選択したシートへ移動してユーザーフォームを閉じる。

各シートにボタンを配置するか、リボンに登録するかでも良いかと
ユーザーフォームを表示させるボタンは
Sub ボタン1_Click()
UserForm1.Show
End Sub
全てのシートにボタンだけ張り付けるでばOKだと思います。

リボンにマクロを表示させる方法も検討されてはどうでしょう。
    • good
    • 1
この回答へのお礼

ご回答、ご提案ありがとうございます。
お恥ずかしながら、Excel自体が初心者で、ユーザーフォームの存在も初めて知りました。
回答者様に教えていただいたことは、今後の参考にしたいと思います。

丁寧にご教授くださり、本当にありがとうございました。

お礼日時:2015/06/03 11:11

No.1です。


移動マクロ部分を修正します。

sub 移動()
Worksheets(CInt(Application.Caller)).Select
End Sub
この回答への補足あり
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
修正案まで教えていただき、本当に感謝しております。
ご丁寧に回答いただき、本当にありがとうございます。

お礼日時:2015/06/03 11:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!