変数宣言していないのであれば、
X = Range("A1")
で「X」「1111」という数値が代入されます。
Worksheets(X).Select
とした時、Worksheetsはインデックス番号でも指定できるので、
1111番目のシートを選択しようとします。なので、エラーです。
Dim X As String
と最初に、変数宣言するべきです。
例:
Worksheets(1).Select
とすると、1番目のシートが選択されます。
Worksheets("1").Select
とした場合、「1」という名前のシートを選択されます。
エクセルjはシートのセルに数字(半角全角ともすべて数字)を入れると、数値化してしまう強力な力が働く仕組みがあります。
だから数字を入れた時点でそのセルの値は数値になります《注意)
Sheets(1)のように()内に数字を入れると、シートのインデクッス番号を(見た目で、シートタブの左から何番目かの数(もちろん約10を越えるとシートタブが見えませんが、その辺は観念的に想像してください)を指定したものと看做され、1111番目のシートなど現在使ってませんでしょうから、該当なしエラーになる。
シートの特定には
(1)名前
(2)インデクす番号
(3)ActiveSheet
(4)Previous,など
の特定方法があります。
この点まだ学習してないのにいろんなことをやろうとしているのが原因です。
(注意)で書いたことも、VBAとは離れて、エクセルの基本的知識で、エクセルのことも十分判ってないと、VBAはスムーズに組めません。
またシート名を数字のみにすることは、余りすすめられないことと思います。
ーーー
Sub test01()
'Sheets("1").Delete
x = Worksheets("2").Range("A1")
x = Trim(Str(x))
MsgBox x
Sheets(x).Delete
End Sub
のようなのが、可能なようだ(テスト済み)。
またSelectとActive式は早く脱却のこと。
お礼
とても分かりやすい説明で感謝します。 サクッと通りました! 本当にありがとうございました。