プロが教えるわが家の防犯対策術!

「ボタンを押すと、指定の各シートがアクティブになる」というマクロを実行したいです。

下記のマクロを実行したところ、
シートの1枚目に、ボタンが作成(シートの枚数分)され、各シートの名前が表示されています。
また、そのボタンをクリックすると、名前が同じシートをアクティブにします。

実行してみると、
シート名に「大文字の英語」が使われているものはエラーになりました。
他の漢字やカタカナなどのシート名のボタンをクリックすると、きちんとアクティブになります。

原因として考えられる事を教えていただき、下記のマクロを修正していただけたら幸いです。

※下記のマクロは以前の質問より、回答者様が作ってくださったマクロです。
↓≪回答者様の説明≫
指定のシートを選択する「シート選択」と言うマクロを用意し、
ボタン設置の時にそのマクロに引数でシート名を渡す様に設定しています。
Worksheets(n).Nameでシート名が取得されています。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
Sub ボタン設置()
  With Worksheets(1)
    For i = 1 To (Worksheets.Count - 1)
      nX = 145 * (1 + ((i - 1) Mod 8))
      nY = 30 * (1 + Int(i / 8))
      sName = Worksheets(i + 1).Name
      With .Buttons.Add(nX, nY, 140, 20)
        .Text = sName
        .OnAction = "'シート選択""" & sName & """'"
      End With
    Next i
  End With
End Sub
Sub シート選択(sShtName As String)
  Worksheets(sShtName).Select
End Sub

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

  • ※説明がわかりづらかったので訂正します。質問したいことは以下の通りです。

    「ボタンを押すと、ボタン名とシート名が一致するシートがアクティブになる」というマクロを実行したいです。

    下記のマクロを実行すると、
    ①シートの1枚目に、ボタンが作成(シートの枚数分)され、各シートの名前が表示される。
    ②また、そのボタンをクリックすると、名前が同じシートをアクティブにする。
    となる予定でした。

    実行してみると、
    シート名に「大文字の英語」が使われているボタンをクリックするとエラーになった。
    ※他の漢字やカタカナなどのシート名のボタンをクリックすると、きちんとアクティブになる。
    となりました。



    原因として考えられる事を教えていただき、下記のマクロを修正していただけたら幸いです。

      補足日時:2015/06/03 17:43

A 回答 (3件)

横から失礼します。



ボタンにマクロ登録する際に、全角アルファベットの場合は上手く登録できないようです。
というわけで、私なら下記のように修正します。
この下から-------------------------------------------------------
Sub ボタン設置()
With Worksheets(1)
For i = 1 To (Worksheets.Count - 1)
nX = 145 * (1 + ((i - 1) Mod 8))
nY = 30 * (1 + Int(i / 8))
sname = Worksheets(i + 1).Name
sno = i + 1
With .Buttons.Add(nX, nY, 140, 20)
.Text = sname
.OnAction = "'シート選択""" & sno & """'"
End With
Next i
End With
End Sub
Sub シート選択(sShtNo As Integer)
Worksheets(sShtNo).Select
End Sub
------------------------------------------------------ここまで
シート名でうまくいかないので、シート番号にしてみました。
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2015/06/04 11:31

#1です。


元のマクロで「ボタン設置の時にそのマクロに引数でシート名を渡す様に設定」されており、
シート名が全角アルファベットの場合に、正しく渡されてないようだったので、
回答ではボタン用のマクロを変更し、シートの名前ではなくシート番号にて渡すようにしました。
ボタンの表記はシート名のまま、内部のマクロだけ変更したので、見た目は同じで動きも同じだと思います。
    • good
    • 0
この回答へのお礼

丁寧なご回答ありがとうございます。
作業が完了しましたのでお礼申し上げます!

お礼日時:2015/06/04 11:31

シート名に全角の英数字があると半角に変換されますね。


エクセルの仕様なのかバグなのか分かりません。
シート名をボタンから取得すれば、質問のエラーは回避できるのでは。

Sub シート選択(sShtName As String)
'Worksheets(sShtName).Select
On Error GoTo ErrorHandler
a = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text
Worksheets(a).Select
Exit Sub
ErrorHandler:
MsgBox "シート名が見つかりません。"
End Sub

あと、質問のサンプルだと8個目のボタンの位置がずれます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
無事さぎょうすることができました!!
本当に感謝しております!

またよろしくお願いします。

お礼日時:2015/06/04 10:25

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