我正在创建一个 excel 2007 应用程序,它使用完全相同的 VBA 代码在 2 列中强制使用大写字母。此代码用于 8 个不同的工作表。我试图在一个模块中创建一个子例程,以便我可以在 8 个工作表中的每一个下调用该子例程,但它不起作用。
当我直接在每个工作表下添加以下代码时,它起作用了:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TargetRowNumber As Integer
Dim targetColumnNumber As Integer
If (Target.Row >= 6 And Target.Row <= 500) Then
If (Not Intersect(Target, Range("F6:F500")) Is Nothing) Then
If Target.Column = 6 Then
Application.EnableEvents = False
Range("$F" & Target.Row).Value = UCase(Range("$F" & Target.Row).Value)
Application.EnableEvents = True
End If
End If
If (Not Intersect(Target, Range("K6:K500")) Is Nothing) Then
If Target.Column = 11 Then
Application.EnableEvents = False
Range("$K" & Target.Row).Value = UCase(Range("$K" & Target.Row).Value)
Application.EnableEvents = True
End If
End If
end if
end sub
但是,如果我使用相同的代码创建一个模块并尝试调用每个工作表下的子例程,我会收到以下错误:运行时错误“424”:需要对象。
模块中的代码:
Sub convert_upper()
Dim TargetRowNumber As Integer
Dim targetColumnNumber As Integer
If (Target.Row >= 6 And Target.Row <= 500) Then
If (Not Intersect(Target, Range("F6:F500")) Is Nothing) Then
If Target.Column = 6 Then
Application.EnableEvents = False
Range("$F" & Target.Row).Value = UCase(Range("$F" & Target.Row).Value)
Application.EnableEvents = True
End If
End If
If (Not Intersect(Target, Range("K6:K500")) Is Nothing) Then
If Target.Column = 11 Then
Application.EnableEvents = False
Range("$K" & Target.Row).Value = UCase(Range("$K" & Target.Row).Value)
Application.EnableEvents = True
End If
End If
End If
End Sub
每个工作表下的代码以调用子例程:
Private Sub Worksheet_Change(ByVal Target As Range)
convert_upper
End Sub
这是我第一次尝试在 vba 中编程。我试图在网上找到解决方案,但没有成功。如果有人可以帮助我,我将不胜感激。
太感谢了。