プロが教える店舗&オフィスのセキュリティ対策術

VBA初心者です。
VBAで複数のシートを選択するという動作を行う時、シート名を変更するとエラーになってしまうのですが、どうすれば回避できるのでしょうか?オブジェクト名?が使用できるらしいのですが、エラーになってうまく動作しません。指定の仕方を変える必要があるのでしょうか?
例えば、
 Sheets(Array("第1週", "第2週", "第3週", "第4週", "第5週")).Select
 Sheets("第1週").Activate
と記述してあって、シート名の"第1週"を"9月1日"とかに変更したら、当然エラーになりますが、
左のプロジェクトエクスプローラにある、Sheet1(第1週)の名前の変わらないオブジェクト名"Sheet1"の方で指定したいと思うのですが、単純に名前を置き換えても動作しません。どのように指定すればよいのでしょうか?

「シート名を変更してもVBAでエラーになら」の質問画像

A 回答 (3件)

具体的なコードを示そうにも各シートの具体的なオブジェクト名(コードネーム)が見えないんでサンプルも掲示できませんが、割と安直に確実な手としては



とりあえず
Sheet5.select
sheet6.select false
sheet7 select false
sheet8.select false
sheet9.select false

とかでイイです。
    • good
    • 0
この回答へのお礼

単純にうまく動作しました。
どうもありがとうございました。

お礼日時:2014/09/23 11:53

>オブジェクト名?が使用できるらしいのですが、



はい。オブジェクト変数に格納してから扱うようにすれば、
シート名が変更されても、同じシートを選択してくれます。

シート名変更前に対象をオブジェクトに格納し、
以下のように『オブジェクト変数(インデックス番号)』
で対象のシートを選択するようにすればシート名に
左右されずに目的のシートを操作できます。

以下のコードでは『第1週』を「mySt(1)」で扱う事ができ、
「mySt(2)、mySt(3)・・・・mySt(5)」で『第5週』のシートとなります。

『第2週』を飛ばした場合でも、左から1、2と
インデックス番号になりますので「mySt(1)~mySt(4)」で
『第1週、第3週、第4週、第5週』を扱うことになります。


■サンプルコード

Sub test()
'オブジェクト変数を用意
Dim mySt As Variant
'シートをオブジェクト変数へ格納
Set mySt = Worksheets(Array("第1週", "第2週", "第3週", "第4週", "第5週"))
'シートを選択
mySt.Select

'シート選択をいったん解除
Worksheets(1).Select
'シート名を変更(選択セルの左から1番目のシート名)
mySt(1).Name = "9月1日"
'シートを選択
mySt.Select
End Sub
    • good
    • 0
この回答へのお礼

やってみました。動作は問題なくしましたが質問内容と少し違いました。

質問の意図は、vbaでシート名を変更するのではなく、シート名を変更してもマクロが動作するという意味だったので・・・。

でも初心者なので参考になりました。
どうもありがとうございました。

お礼日時:2014/09/23 12:00

シートの並び順に変更がないのでしたら、



Sheets(Array(1, 2, 3, 4, 5)).Select
Sheets(1).Activate

と、左からのシート位置で指定する方法も・・・
    • good
    • 1
この回答へのお礼

うまく動作しました。
シート順が変化しないなら明快です。

お礼日時:2014/09/23 11:54

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

このQ&Aを見た人はこんなQ&Aも見ています