gg7*_*aph 5 excel vba worksheet-function subscript
所有,
我在Excel宏中遇到一些VBA代码的错误.这是我正在尝试的工作流程:
一旦我知道这个范围,我使用下面的代码写入新创建的工作表代码模块,这样我就可以设置'change_event'.我只想在我刚刚确定的范围内的值发生变化时触发change_event:`
Dim Startline As Long
Startline = 1
Dim x As Integer
x = Errors.Count - 1
Dim rng As Range
Set rng = Range("D" & LastRow - x & ":" & "D" & LastRow)
With ThisWorkbook.VBProject.VBComponents(VRS.CodeName).CodeModule
Startline = .CreateEventProc("Change", "Worksheet") + 1
.InsertLines Startline, "Dim rng As Range "
Startline = Startline + 1
.InsertLines Startline, "Set rng = Range(" & """" & CStr(rng.Address) & """" & ")"
Startline = Startline + 1
.InsertLines Startline, "If Target.Count > 1 Then Exit Sub"
Startline = Startline + 1
.InsertLines Startline, "If Intersect(Target, rng) Is Nothing Then Exit Sub"
Startline = Startline + 1
.InsertLines Startline, "MsgBox (""Value Changed!..."") "
End With
Run Code Online (Sandbox Code Playgroud)代码可以工作,并将以下内容写入指定工作表的代码模块中:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range("D58:D62")
If Target.Count > 1 Then Exit Sub
If Intersect(Target, rng) Is Nothing Then Exit Sub
MsgBox ("Value Changed!...")
End Sub`
Run Code Online (Sandbox Code Playgroud)
此代码也有效,并且当更改范围中的单元格时,将显示消息框.但是,关闭 VBE 会产生错误:
Run-time error '9': Subscript out of range
Run Code Online (Sandbox Code Playgroud)
点击调试将我带到了这一行:
With ThisWorkbook.VBProject.VBComponents(WS.CodeName).CodeModule
Run Code Online (Sandbox Code Playgroud)
但它实际上会在以下行引发错误:
Startline = .CreateEventProc("Change", "Worksheet") + 1
Run Code Online (Sandbox Code Playgroud)
我不确定您为什么会收到该错误,但这是另一种可以避免该错误的方法
Sub Main()
Dim ws As Worksheet
Dim rng As Range
Dim sCode As String
Set ws = ThisWorkbook.Worksheets.Add
Set rng = ws.Range("D1:D10")
sCode = "Private Sub Worksheet_Change(ByVal Target As Range)" & vbNewLine & vbNewLine
sCode = sCode & vbTab & "Dim rng As Range" & vbNewLine & vbNewLine
sCode = sCode & vbTab & "Set rng = Me.Range(" & """" & rng.Address & """" & ")" & vbNewLine & vbNewLine
sCode = sCode & vbTab & "If Target.Count > 1 Then Exit Sub" & vbNewLine
sCode = sCode & vbTab & "If Intersect(Target, rng) Is Nothing Then Exit Sub" & vbNewLine & vbNewLine
sCode = sCode & vbTab & "MsgBox (""Value Changed!..."") " & vbNewLine
sCode = sCode & "End Sub"
ThisWorkbook.VBProject.VBComponents(ws.CodeName).CodeModule.AddFromString sCode
End Sub
Run Code Online (Sandbox Code Playgroud)