Excel 生成新图纸时是否可以自动输入VBA代码?

Excel 生成新图纸时是否可以自动输入VBA代码?,excel,vba,Excel,Vba,是否可以创建一个新的Excel工作表,然后自动将VB代码放入该工作表中 以下是我迄今为止所做的工作。名为Template的工作表可以输入用户需要输入的所有信息。我进行了各种检查,以确保在执行任何其他操作之前,所有字段都已填写并正确填写。当他们点击某个单元格来执行脚本时,它将打开一个Word文档并导入其中所有必需的信息。然后在Excel中创建一个新的工作表。根据从模板工作表的组合框(cboSites)中选择的内容,为新工作表命名。我还进行了检查,以确保没有同名的工作表。我所有这些工作都没有任何问题

是否可以创建一个新的Excel工作表,然后自动将VB代码放入该工作表中

以下是我迄今为止所做的工作。名为Template的工作表可以输入用户需要输入的所有信息。我进行了各种检查,以确保在执行任何其他操作之前,所有字段都已填写并正确填写。当他们点击某个单元格来执行脚本时,它将打开一个Word文档并导入其中所有必需的信息。然后在Excel中创建一个新的工作表。根据从模板工作表的组合框(cboSites)中选择的内容,为新工作表命名。我还进行了检查,以确保没有同名的工作表。我所有这些工作都没有任何问题

从这里开始,我想做的是,当创建新工作表时,我想让VBA代码自动转储到这个新工作表中。我知道我想要使用的代码,但我不知道如何获得它,所以它会自动将代码与该表放在一起


这是可能的,还是只能创建和格式化一个新的工作表,而不能将任何代码导入其中?

我不知道有什么简单的方法可以将代码放入Excel文件中。 有人可能会考虑直接更改XML结构(xlsx文件基本上是XML和代码文件的压缩目录)。
但是您是否考虑过使用XLAM(Excel Advin)文件,它可以包含代码,并为所有需要使用它的用户导入。当用户启动它时,它将用Excel打开。根据您的设置,这可能会对您有所帮助?

我不知道将代码放入Excel文件的简单方法。 有人可能会考虑直接更改XML结构(xlsx文件基本上是XML和代码文件的压缩目录)。
但是您是否考虑过使用XLAM(Excel Advin)文件,它可以包含代码,并为所有需要使用它的用户导入。当用户启动它时,它将用Excel打开。根据您的设置,这可以帮助您查看正在生成的工作簿的
VBProject
属性。您应该能够操作它,添加包含所需代码的新VBComponents项

这需要进行适当的安全设置

以下是与此主题相关的另一个站点上的一个帖子:


我自己还没有试过,所以我无法提供更多详细信息。

查看正在生成的工作簿的
VBProject
属性。您应该能够操作它,添加包含所需代码的新VBComponents项

这需要进行适当的安全设置

以下是与此主题相关的另一个站点上的一个帖子:


我自己还没有试过,所以我不能给出更多的细节。

下面是一个示例代码,它将插入

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    MsgBox "Hello World"
End Sub
在新工作簿的新工作表中

Sub Sample()
    Dim wb As Workbook, ws As Worksheet
    Dim VBP As Object, VBC As Object, CM As Object
    Dim strProcName As String

    Set wb = Workbooks.Add
    Set ws = wb.Sheets(1)

    Set VBP = wb.VBProject
    Set VBC = VBP.VBComponents(ws.Name)
    Set CM = VBC.CodeModule

    strProcName = "Worksheet_SelectionChange"

    With wb.VBProject.VBComponents( _
    wb.Worksheets(ws.Name).CodeName).CodeModule
        .InsertLines Line:=.CreateEventProc("SelectionChange", "Worksheet") + 1, _
        String:=vbCrLf & _
        "    Msgbox ""Hello World"""
    End With
End Sub
请根据您的需要修改一下


您需要确保选中了对Visual Basic Project的信任访问。要选择它,请按照

中提到的步骤操作。下面是一个示例代码,它将插入

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    MsgBox "Hello World"
End Sub
在新工作簿的新工作表中

Sub Sample()
    Dim wb As Workbook, ws As Worksheet
    Dim VBP As Object, VBC As Object, CM As Object
    Dim strProcName As String

    Set wb = Workbooks.Add
    Set ws = wb.Sheets(1)

    Set VBP = wb.VBProject
    Set VBC = VBP.VBComponents(ws.Name)
    Set CM = VBC.CodeModule

    strProcName = "Worksheet_SelectionChange"

    With wb.VBProject.VBComponents( _
    wb.Worksheets(ws.Name).CodeName).CodeModule
        .InsertLines Line:=.CreateEventProc("SelectionChange", "Worksheet") + 1, _
        String:=vbCrLf & _
        "    Msgbox ""Hello World"""
    End With
End Sub
请根据您的需要修改一下


您需要确保选中了对Visual Basic Project的信任访问。要选择它,请按照

中提到的步骤进行操作。我发现我可以创建另一个模板,并且代码已经在其中。然后,让它复制模板并重命名复制的模板,而不是创建新的图纸。我还可以使模板不可见。我想这会管用的。我仍然想知道是否可以使用脚本将代码放入新的工作表中,这将是我首选的方法。如果有人有主意,请告诉我。谢谢我发现我可以创建另一个模板,代码已经在那里了。然后,让它复制模板并重命名复制的模板,而不是创建新的图纸。我还可以使模板不可见。我想这会管用的。我仍然想知道是否可以使用脚本将代码放入新的工作表中,这将是我首选的方法。如果有人有主意,请告诉我。谢谢这太漂亮了,谢谢!为了让它在同一工作簿中工作而不创建新工作簿,我删除了两行Set VBC&Set CM。我还更改了Set wb=ThisWorkBook。我没有设置ws=wb.Sheets(1),而是将生成的工作表字符串放在1的位置。在Dim语句之后,我刚刚执行了addsheet命令,并指定了它应该放在哪里。这太棒了!谢谢很高兴能帮上忙:)这很漂亮,谢谢!为了让它在同一工作簿中工作而不创建新工作簿,我删除了两行Set VBC&Set CM。我还更改了Set wb=ThisWorkBook。我没有设置ws=wb.Sheets(1),而是将生成的工作表字符串放在1的位置。在Dim语句之后,我刚刚执行了addsheet命令,并指定了它应该放在哪里。这太棒了!谢谢很高兴能帮上忙:)