マクロのプログラムで、プログラムを動作させるシートを任意で選択するコマンドがわかりません。お力貸してください。
今、アクティブセルを含むそれより下のセルに、シートの名前が並べて書いてあります。例えば、A1がアクティブセルのとき、A1~A10まで(A11は空白セル(=終了条件))に、
Sheet2
Sheet3
:
Sheet11
と書いてあります。
そして、あらかじめマクロに書いてあるプログラム
Sub Creat_Texts()
Sub_Rountine_1
Sub_Routine_2
End Sub
を、それぞれA1~A10で指定したシート上、つまりSheet2やSheet3で次々に実行していくようなマクロを作りたいです。
よろしくお願いします。
Sheets("シート名").Activate
で"シート名"シートが選択されます。↓のようなコードでどうでしょうか。
Sub Creat_Texts() Dim myCell As Range Set myCell = ActiveCell Do While myCell.Value <> "" Sheets(myCell.Value).Activate Sub_Routine_1 Sub_Routine_2 Set myCell = myCell.Offset(0, 1) Loop End Sub
Sheets("シート名").Activate
で"シート名"シートが選択されます。↓のようなコードでどうでしょうか。
Sub Creat_Texts() Dim myCell As Range Set myCell = ActiveCell Do While myCell.Value <> "" Sheets(myCell.Value).Activate Sub_Routine_1 Sub_Routine_2 Set myCell = myCell.Offset(0, 1) Loop End Sub
残念ながら、一つ目のシートで実行した時点でとまってしまいます。
質問の理解を間違えていたらごめんなさい。
y3kzさんの回答で、元のシートに戻らないためエラーとなったと思います。
Set myCell = myCell.Offset(0, 1)
の前に最初のシートに戻る必要があると思います。
私は、for を使って作ってみましたので、記載しておきます。
シート名がA2からA10にあるのが前提です。
シート名が書かれた場所が、変わる場合別のプログラムが必要です。
Sub Creat_Texts()
'以下でシート選択
Dim アクティブシート, 選択シート As String
Dim I As Integer
アクティブシート = ActiveSheet.Name
For I = 2 To 3
選択シート = Range("A" & I).Value
Sheets(選択シート).Select
'既存のプログラム
Sub_Rountine_1
Sub_Routine_2
'次のシートへ]
Sheets(アクティブシート).Select
Next I
End Sub
以上です。4行目の
アクティブシート = ActiveSheet.Name
は、最初のアクティブシートが固定されていれば、そのシート名を使えば簡単です。
ちなみにSheets(1),Sheets(2),Sheets(3),Sheets(4),…
とすれば、左から何番目かのシートを選択出来るようです。
http://www.happy2-island.com/excelsmile/smile03/capter00100.shtm...
ご丁寧にありがとうございます。
参考にさせて頂きます。
これでいけると思いますが、どうでしょう。
Sub test() Dim index As Worksheet Dim r As Long, c As Long Set index = ActiveSheet r = ActiveCell.Row c = ActiveCell.Column Do While index.Cells(r, c).Value <> "" Worksheets(index.Cells(r, c).Value).Select Call Creat_Texts r = r + 1 Loop index.Select End Sub
ご丁寧にありがとうございます。
いつもいつもすばらしいプログラムですね。
残念ながら、一つ目のシートで実行した時点でとまってしまいます。