Excel vba以编程方式将代码添加到工作表模块
Posted
技术标签:
【中文标题】Excel vba以编程方式将代码添加到工作表模块【英文标题】:Excel vba add code to sheet module programmatically 【发布时间】:2016-01-17 09:47:01 【问题描述】:如何将程序生成的工作簿放入类似于以下的事件代码:
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
【问题讨论】:
所以你基本上是在尝试创建一个工作簿,然后将代码复制到新创建的工作中? 选项:使用包含代码的模板,使用 vba ide 接口以编程方式添加代码,或使用另一个工作簿中的应用程序级事件来运行代码 【参考方案1】:使用它来添加工作簿并将工作表更改事件放入 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 中创建一个事件过程。 是否可以对上述代码应用后期绑定?我收到错误 ActiveX 组件无法创建对象。 太棒了。这需要cpearson doc完成,需要自己调整为VBA和windows版本(32/64位)见mdsn和这个SO question 我建议不要使用 CreateEventProc。我发现它会导致 VBA 编辑器在用户(或我)面前毫不客气地打开。我只是再次测试以确定。而是像这样使用 InsertLines:InsertLines xLine、“Private Sub MyButton_Click()”,后跟过程代码和 End Sub。从我能够确定的任何事情来看,CreateEventProc 没有做任何 InsertLines 无法做到的特殊事情,除了它可能只是将两个参数与下划线粘合在一起以获得格式为“ObjectName_EventName”的过程名称。 有没有办法更改 With 属性以将代码插入到指定的预先存在的模块中?例如,假设我们希望将 .InsertLines 添加的代码插入到 Module4 的第 5 行中?以上是关于Excel vba以编程方式将代码添加到工作表模块的主要内容,如果未能解决你的问题,请参考以下文章
使用Excel VBA,如何将某一个工作表保存到新建的Excel中?