将 VBA 代码添加到动态创建的 Excel 工作表

Add VBA code to dynamically created Excel sheets

我正在编写一个 Excel 工作簿,其中有一个初始 sheet。第一个 sheet 是一个表单,询问用户他们的项目中有多少项目。然后,该宏会为其项目中的每个项目生成一个 sheet。

每个生成的 sheet 都有执行特定功能的按钮,并且这些按钮在 sheet 的代码中绑定了点击事件。

我已经在 sheet 静态 sheet 中编写了我需要的所有功能。

我想知道是否有办法在表单创建所有格式和按钮后将此代码导入所有动态创建的 sheets。

如有任何帮助,我们将不胜感激!

正如@cyboashu所说,只需复制sheet,它就会复制所有的公式和格式。到那时,仍然可以对单个 sheet 进行任何需要的额外更改。它们不是链接副本。

这是一个快速而肮脏的宏,用于将工作sheet(1) 复制到工作簿的末尾并重命名。如果您需要进行任何格式化,您可以在粘贴后使用 ActiveSheet 立即进行。将新的 Activesheet 分配给一个变量以供稍后引用是更好的做法,但我不是 100% 确定如何在不进一步挖掘的情况下做到这一点。也许有人可以详细说明。

    Sub copysheet()
    Dim Mainws As Worksheet
    Dim Mainwb As Workbook
    Set Mainwb = ThisWorkbook
    Set Mainws = ThisWorkbook.Worksheets(1)

    i = Mainwb.Worksheets.Count

    With Mainwb
       Mainws.Copy after:=Worksheets(i)
       Worksheets(i + 1).Name = "Copied Worksheet"
    End With
    With ActiveSheet
        Cells(1, 1).Value = "Copied Sheet"
        'other formatting changes
    End With

    'increment i variable if you plan to make more copies in a loop
    'i = Mainwb.Worksheets.Count

    End Sub

您可以创建一个名为 "Template"(可能隐藏)的 sheet,它包含所有代码和按钮,然后使用如下内容:

Sheets("Template").Copy After:=Sheets(Sheets.count)

此时,Activesheet将是新复制的sheet,因此您可以定义一个变量来引用它并进行所需的所有更改。例如:

Dim ws as Worksheet
set ws = Activesheet
ws.Range("A1") = "test"