宏从“主”选项卡中的列表中创建Excel中的新选项卡,并使用相同的名称填充每个选项卡中的单元格

时间:2016-01-19 16:08:31

标签: excel vba excel-vba tabs

我找到了从" Master"中的列表创建和命名新标签的代码。选项卡,但我还需要在每个新选项卡的单元格中填充名称。此外,我需要每个新选项卡包含一个模板(不同于主选项卡),它只是一个带有标题的空白表和一些内置于某些列的公式。每个新选项卡应具有完全相同的模板,但填充一个单元格(表格的标题)以匹配选项卡的名称。

最后,我需要用户打开工作簿,在主选项卡中填充一个列表(不会总是相同的长度,可能只是1),然后按一个按钮(运行一个宏),并有根据上面的标签创建标签。似乎我可能需要创建一个隐藏的选项卡,其中包含要复制的模板?这可能吗?这里的任何指导将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

欢迎使用StackOverflow。以下几点可以帮助您解决问题:

  1. 是的,这是可能的!
  2. Excel中没有标签,但是表格。
  3. 带桌子的模板是个好主意。您可以将其放在隐藏的工作表中,但请记住为此工作表设置非常不寻常的名称,例如zZzmyVeryHiddenSheetzZz。这样你就可以确定没有人会尝试添加一个完全相同名称的工作表。
  4. 使用VBA,您可以制作模板veryhidden,因此即使从“取消隐藏工作表”菜单也无法访问该模板。
  5. 使用宏录制器!开始录制宏,执行您想要完成的任务,停止录制并检查您的代码。您可以通过将光标放在宏代码中并按F8来检查它是如何工作的。代码所做的每个更改都会立即显示在工作簿中。
  6. 尝试在录制宏时使用键盘快捷键,例如而不是通过鼠标选择范围,尝试使用shift+arrowctrl+shift+arrow组合。这将生成更多动态代码。
  7. 祝你好运!

答案 1 :(得分:0)

假设您的主表名为" Master"和模板命名为" Hidden"。您应该能够根据需要调整以下代码。

(提交我的答案有点迟了,但我认为这将为您提供更多的灵活性,因为它更清楚发生了什么)

Private Sub CommandButton1_Click()
Dim masterSheet As Worksheet
Dim hiddenSheet As Worksheet
Dim NewSheet As Worksheet
Dim myBook As Workbook
Dim lastRow As Long
Dim i As Long
Dim namesColumn

'Define your workbook - here set as the active workbook, assuming it contains masterSheet and hiddenSheet
Set myBook = ActiveWorkbook

'Define your worksheets - The sheets are named "Master" and "Hidden" respectively
Set masterSheet = myBook.Worksheets("Master")
Set hiddenSheet = myBook.Worksheets("Hidden")

'Define which column in your master tab the list is - here it's A i.e. column 1
namesColumn = 1

'Find the last row of the sheets list
lastRow = masterSheet.Cells(masterSheet.Rows.Count, namesColumn).End(xlUp).Row

'Cycle through the list - Assuming the list starts in column "A" from the 2nd row
For i = 2 To lastRow
    With myBook
        'New sheet
        Set NewSheet = .Worksheets.Add(After:=.Worksheets("Master"))
    End With

    'Find name of the tab and naming the tab
    tabName = masterSheet.Cells(i, namesColumn)
    NewSheet.Name = tabName

    'Copy from hidden template - You can choose the ranges if predefined or use .Cells(r,c) to do something fancier
    hiddenSheet.Range("A1:F6").Copy _
        Destination:=NewSheet.Range("A2:F7")

    'Paste in e.g. cell A1 i.e. (1,1) the tab name
    NewSheet.Cells(1, 1).Value = tabName
Next i

End Sub