Excel VBA向工作表模块程序化添加代码

21

如何将通过编程生成的工作簿放入类似以下事件代码的事件中:

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

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - SilentRevolution
4
选项:使用包含代码的模板,使用VBA IDE接口编程添加代码,或在另一个工作簿中使用应用程序级事件来运行代码。 - chris neilsen
1个回答

29

使用此功能来添加工作簿并将工作表更改事件放置到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

当你第一次运行代码时,可能会遇到错误。

图片描述

点击停止图标,选择工具菜单中的“引用”

图片描述

图片描述

然后找到“Microsoft Visual Basic for Applications Extensibility 5.3 library”,并选中它。

图片描述

再次运行代码,应该就可以了。


不错。我从没注意到你可以在VBIDE中创建事件过程。 - Doug Glancy
以上代码是否可以应用后期绑定?我收到了“ActiveX 组件无法创建对象”的错误。 - Kelaref
很好。这需要通过cpearson文档完成,该文档本身需要调整到VBA和Windows版本(32/64位)。请参阅mdsn和此SO问题 - hornetbzz
2
我建议不要使用CreateEventProc。我发现它会导致VBA编辑器在用户(或我)面前不受礼貌地打开。我刚刚再次进行了测试以确保。相反,使用InsertLines,如下所示:InsertLines xLine,“Private Sub MyButton_Click()”,然后是过程代码和End Sub。从我能够确定的任何内容来看,CreateEventProc没有做任何特殊的事情,不能用InsertLines完成,除非它只是使用下划线将两个参数粘合在一起,以获取格式为“ObjectName_EventName”的过程名称。 - spinjector
有没有一种方法可以将With属性更改为将代码插入到指定的现有模块中?例如,假设我们希望由.InsertLines添加的代码被插入到Module4中的第5行? - Majora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接