Excel VBA代码返回错误

时间:2018-04-05 13:28:30

标签: excel vba excel-vba

有一个带有此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”。

我怎么能纠正这个?

2 个答案:

答案 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