【问题标题】:Macro to create new tabs in Excel from a list in a Master tab and populate a cell in each tab with the same name用于从主选项卡中的列表在 Excel 中创建新选项卡并在每个选项卡中填充具有相同名称的单元格的宏
【发布时间】:2016-01-19 16:08:31
【问题描述】:

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

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

【问题讨论】:

  • 使用宏记录器对一张纸执行您想要的操作,然后创建一个循环以在添加时对所有纸执行此操作,并使用变量来更改所需的特定单元格。
  • 您可以在代码中的每个新选项卡中创建表格,而不是使用隐藏选项卡。我假设当您说“选项卡”时,您的意思是工作表(工作簿底部带有选项卡)。选择新工作表,然后将单元格设置为工作表名称。这很简单 cells(r,c).value = WorksheetName 其中 r 和 c 是您要填充的单元格的行和列,WorksheetName 是一个包含“选项卡”名称的字符串变量

标签: vba excel tabs


【解决方案1】:

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

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

祝你好运!

【讨论】:

  • 你需要 TM 这个。从现在开始,我将链接到此答案以表示感谢。
  • 谢谢!我如何处理主列表的长度可能因用户而异?例如,当我录制宏时,列表上可能有 5 个项目要转换为工作表(不是选项卡),但列表上总是不会有 5 个项目...
  • @bsm726 第 6 点是您问题的答案。用鼠标选择列表的第一个范围,然后按ctrl+shift+down_arrow 并检查生成的代码。
  • 非常感谢!会试试看!
【解决方案2】:

假设您的主工作表名为“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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    相关资源
    最近更新 更多