有一个带有此vba的excel文件:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Application.Intersect(Target, Range("A1:A1000")) _
Is Nothing) Then
With Target
If Not .HasFormula Then
Application.EnableEvents = False
.Value = UCase(.Value)
Application.EnableEvents = True
End If
End With
End If
End Sub
这样做,当在这些单元格上插入某些内容时,它会将其转换为大写字母。一切正常,只是一个小问题......文件每天都被几个人使用,因此插入的数据每天都被删除几次。如果我一次删除一个单元格,它会顺利运行,如果我同时删除了几个单元格,则会出现运行时错误“13”。
我怎么能纠正这个?
答案 0 :(得分:5)
当Target超过单个单元格时,遍历Target中的每个匹配单元格。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A1000") Is Nothing Then
dim trgt as range
for each trgt in Intersect(Target, Range("A1:A1000")
With trgt
If Not .HasFormula Then
Application.EnableEvents = False
.Value = UCase(.Value)
Application.EnableEvents = True
End If
End With
next trgt
End If
End Sub
答案 1 :(得分:2)
你可以简单地做以下事情(这是化妆品...... @ Jeeped的回答是要走的路,考虑一下人们粘贴到一个以上的牢房的例子,但现在没有考虑到这一点正如他所做的那样!)
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Application.Intersect(Target, Range("A1:A1000")) _
Is Nothing) Then
With Target
If Not .HasFormula Then
Application.EnableEvents = False
On Error Resume Next
.Value = UCase(.Value)
On Error GoTo 0
Application.EnableEvents = True
End If
End With
End If
End Sub