0

私は最近 VBA に戻ってきて、変数内の文字列によってワークシートを追加するという概念をテストしています。ワークシートを正常に追加することができました。コードの最後の 2 行は、変数のシート名を選択し、セル A + 別の変数に格納されている行番号を選択するだけです。

A1 から始まるシート 1 の列 A には、循環する 8 つの異なる名前のリストがあります。

  • ボブ
  • ジェフ
  • マックス
  • スティーブ
  • ロージー
  • ピッパ
  • ペネロペ
  • ロブ

セル A9 が選択されたシート "Rob" でマクロが終了することを期待していますが、実行時エラー 1004 が発生します

コードをステップ実行し、変数を使用してシートを正しく選択していますが、行 A9 を選択しようとすると、エラーが表示されます

私のコードは以下の通りです:

Sub Add_worksheets()

Dim sheetName As String
Dim rownum As Integer

rownum = 1
Range("A" & rownum).Select
sheetName = ActiveCell.Value

Do Until Range("A" & rownum).Value = ""
Range("A" & rownum).Select
sheetName = CStr(ActiveCell.Value)
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = sheetName
Sheets("sheet1").Select
rownum = rownum + 1
Loop

Sheets(sheetName).Select
Range("A" & rownum).Select

End Sub

どんな助けでも大歓迎です

4

1 に答える 1

0

また、シート名が存在するかどうかを確認するために追加することをお勧めしますif-else.なぜしたいのですselectか? 選択はサポートしていません。必要なので、これを試してみてください:インクリメントrownumすると10番目のセルになるため、シート名には名前がなくなり、空になります..

Dim sheetName As String
Dim rownum As Integer
Dim WS as WorkSheet

rownum = 1
sheetName = Range("A" & rownum).Value '-- remove select


Do Until Range("A" & rownum).Value = ""
Range("A" & rownum).Select
sheetName = CStr(ActiveCell.Value)
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = sheetName
Set WS = Sheets(sheetName)
Sheets("sheet1").Select
rownum = rownum + 1
Loop

rownum = rownum - 1 '-- here
WS.Activate
Range("A" & rownum).Value = rownum

または、配列を使用してシートの作成を行い、後でシートを選択することもできます....最初のシートに行ったり来たりする代わりに..

Sub addSheets()
Dim rowNum as Integer
Dim Ws as WorkSheet
Dim vArray as Variant

'-- creates one dimensional array
vArray = WorkSheetFunction.Transpoe(Sheets(1).Range("A1:A9")) 

For rownum = Lbound(vArray) to Ubound(vArray)
   If IsEmpty(vArray(rowNum)) Then
      On Error Resume Next
      Set Ws = Sheets(vArray(rowNum))
      If Err.Number <> 0 Then '--no such sheet, so add it
         Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = vArray(rowNum)
         Set Ws = Sheets(vArray(rowNum))
      End If
   End IF
Next rownum

Ws.Activate
Ws.Range("A1").offset(rownum).value = rownum
End Sub
于 2013-01-21T12:25:16.407 に答える