1

我是 excel 新手,我正在尝试添加多张工作表,并为每张工作表命名。宏一次只添加一张表,例如我将单击“运行”,它将创建“价格调整”表,但不会创建其他表。当我再次单击“运行”时,它将仅创建下表,依此类推。

Sub NewSheets()

With Sheets.Add()
    .Name = "CustomerTable"
    .Name = "EmployeeTable"
    .Name = "OrdersTable"
    .Name = "ProductTable"
    .Name = "PriceAdjustment"
End With

End Sub

谢谢

4

3 回答 3

4

代码的最快改进是像这样移动Add() method内部With...End With语句:

Sub NewSheets()

With Sheets
    .Add().Name = "CustomerTable"
    .Add().Name = "EmployeeTable"
    .Add().Name = "OrdersTable"
    .Add().Name = "ProductTable"
    .Add().Name = "PriceAdjustment"
End With

End Sub
于 2013-05-31T04:42:01.900 回答
1

解决此问题的另一种方法是将新工作表名称放入一个数组中,然后遍历该数组以一次创建所有五个表。

关于代码需要注意的几点:

  • 工作表名称的数组shArray被声明为 Variant,这样我们就可以用Array函数填充数组,而不必遍历数组来分配每个元素。

  • 在设置For循环时,我使用LBoundandUBound函数来计算数组的第一个和最后一个元素的索引号。这样,如果数量发生变化,就没有必要跟踪数组元素的数量。

    Option Explicit                        'Turn on compiler option requiring
                                           'that all variables be declared
    Sub NewSheets()
    
      Dim shArray() As Variant             'Declare the sheet Name array and a
      Dim i As Long                        'counter variable
    
      shArray = Array("CustomerTable", _
                      "EmployeeTable", _
                      "OrdersTable", _
                      "ProductTable", _
                      "PriceAdjustment")   'Populate the array
    
      For i = LBound(shArray) To UBound(shArray)  'Loop through the elements
          Sheets.Add().Name = shArray(i)           
      Next i
    
    End Sub
    
于 2013-05-31T02:51:30.450 回答
0

这是因为您调用了Add()一次该方法。尝试这个:

Sub AddNewWorksheet(name as String)
    With Worksheets.Add()
        .Name = name
    End With
End Sub

然后您可以像这样添加工作表:

AddNewWorksheet("CustomerTable")
AddNewWorksheet("EmployeeTable")
'...
于 2013-05-31T02:11:45.327 回答