Excel vba以编程方式将代码添加到工作表模块

vim*_*liu 14 excel vba excel-vba

如何将以编程方式生成的工作簿放入类似于下面的事件代码:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim nextTarget As Range

    Set nextTarget = Range(Selection.Address) 'store the next range the user selects

    Target.Columns.Select 'autofit requires columns to be selected
    Target.Columns.AutoFit

    nextTarget.Select
End Sub
Run Code Online (Sandbox Code Playgroud)

Dav*_*cel 19

使用此选项添加工作簿并将工作表更改事件放入Sheet1模块.

Sub AddSht_AddCode()
    Dim wb As Workbook
    Dim xPro As VBIDE.VBProject
    Dim xCom As VBIDE.VBComponent
    Dim xMod As VBIDE.CodeModule
    Dim xLine As Long

    Set wb = Workbooks.Add

    With wb
        Set xPro = .VBProject
        Set xCom = xPro.VBComponents("Sheet1")
        Set xMod = xCom.CodeModule

        With xMod
            xLine = .CreateEventProc("Change", "Worksheet")
            xLine = xLine + 1
            .InsertLines xLine, "  Cells.Columns.AutoFit"
        End With
    End With

End Sub
Run Code Online (Sandbox Code Playgroud)

当您第一次运行代码时,您可能会收到错误.

在此输入图像描述

点击停止图标,然后选择工具菜单和"参考"

在此输入图像描述

在此输入图像描述

然后找到"Microsoft Visual Basic for Applications Extensibility 5.3 library"并检查它.

在此输入图像描述

再次运行代码,它应该工作.

  • 我建议不要使用 CreateEventProc。我发现它会导致 VBA 编辑器在用户(或我)面前毫不客气地打开。我刚刚再次测试以确定。相反,请像这样使用 InsertLines:InsertLines xLine,“Private Sub MyButton_Click()”,后跟过程代码和 End Sub。从我所能确定的情况来看,CreateEventProc 不会做任何 InsertLines 无法完成的特殊操作,除了它可能只是将两个参数与下划线粘合在一起以获取格式为“ObjectName_EventName”的过程名称。 (2认同)