2017-06-20 12 views
0

私の目的は、配列内の各文字列のテンプレートシートのコピーを作成するコードを作成して、コピーしたシートの名前を文字列に一致するように変更することです。ExcelのVisual Basicのコピーシート

Microsoft Visual Basic for Applicationsを初めて使用しました。私は "ThisWorkbook"の下に自分のコードを追加しました。私は、コードを実行したときしかし、私は範囲

エラーのうち、

添字を取得します。

Sub generateStationTabs() 
     Dim stringNames() As Variant 
     Dim currentString As String 
     Dim previousSheet As String 

     previousSheet = "Template     " 

     stringNames() = Array("String 1", "String 2", "String 3", "String 4", "String 5", "String 6", "String 7", "String 8", "String 9", "String 10", "String 11", "String 12", "String 13", "String 14", "String 15", "String 16", "String 17", "String 18", "String 19", "String 20", "String 21", "String 22", "String 23", "String 24", "String 25", "String 26", "String 27", "String 28", "String 29", "String 30") 
     For indexVariable = 0 To UBound(stringNames) 
      ' Pad String Name to 20 Characters Length  currentString = Left(stringNames(indexVariable) & Space(8), 20) 
      ' Copy the Template worksheet to after the Previous Sheet 
      ActiveWorkbook.Sheets("Template     ").Copy after:=ActiveWorkbook.Sheets(previousSheet)   
      ' Rename the copied worksheet 
      ActiveWorkbook.ActiveSheet.Name = currentString   
      ' Update the previous sheet 
      previousSheet = currentString 
     Next 

    End Sub 

答えて

1

まだActiveWorkbook.Sheets(previousSheet)は定義されていません。基本的には、まだ作成していないシートを探すようにExcelに依頼しているため、見つけることができません。

代わりに、あなたは...

ActiveWorkbook.Sheets("Template ").Copy after:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)

を試してみてください...そして、あなたが合うように、シートの名前を変更することができます。

1

コードは次のようになります。

Sub generateStationTabs() 
    Dim stringNames() As Variant 
    Dim currentString As String 
    Dim previousSheet As String 

    previousSheet = "Template" 

    stringNames() = Array("String 1", "String 2", "String 3", "String 4", "String 5", "String 6", "String 7", "String 8", "String 9", "String 10", "String 11", "String 12", "String 13", "String 14", "String 15", "String 16", "String 17", "String 18", "String 19", "String 20", "String 21", "String 22", "String 23", "String 24", "String 25", "String 26", "String 27", "String 28", "String 29", "String 30") 
    For i = 0 To UBound(stringNames) 
     ' Pad String Name to 20 Characters Length  currentString = Left(stringNames(indexVariable) & Space(8), 20) 
     ' Copy the Template worksheet to after the Previous Sheet 
     ActiveWorkbook.Sheets("Template").Copy after:=ActiveWorkbook.Sheets(Sheets.Count) 
     ' Rename the copied worksheet 
     ActiveWorkbook.ActiveSheet.Name = stringNames(i) 
     ' Update the previous sheet 
     'previousSheet = currentString 
    Next 

End Sub 
関連する問題