Excel VBA Workbook_NewSheet编译错误:未找到方法或数据成员求助
编译错误“Method or data member not found”的原因及解决方法
错误原因
代码中直接使用ws.CodeModule是错误的——Worksheet对象本身并不包含CodeModule这个属性或数据成员。要操作工作表的代码模块,必须通过Excel VBA项目的VBComponent对象来访问。
修正后的代码
Private Sub Workbook_NewSheet(ByVal Sh As Object) Dim ws As Worksheet Set ws = Sh ' Add Worksheet_Change event to new sheet Dim code As String code = "Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf & _ " If Not (Application.Intersect(Range(""A1:E19""), Target) Is Nothing) Then" & vbCrLf & _ " MsgBox ""Cell "" & Target.Address & "" has changed."", vbInformation, ""Test""" & vbCrLf & _ " End If" & vbCrLf & _ "End Sub" ' 通过VBComponent访问代码模块 With ThisWorkbook.VBProject.VBComponents(ws.Name).CodeModule .InsertLines 2, code End With End Sub
额外注意事项
- 必须在Excel信任中心开启"信任对VBA项目对象模型的访问":依次点击「文件」→「选项」→「信任中心」→「信任中心设置」→「宏设置」,勾选对应选项,否则会触发权限错误。
- 若新工作表的代码模块默认包含
Option Explicit(开启强制变量声明时),插入到第2行是合理的;若没有该行,可调整InsertLines的行号为1,或用.CountOfLines + 1来追加到模块末尾。
内容的提问来源于stack exchange,提问作者majinvegito123
相关产品推荐
相关产品推荐

