iT邦幫忙

0

Excel VBS 選擇多欄按Delete鍵出弄錯誤訊息!

ddovwmk 1 月前4939 瀏覽

大家好:
  如上的語法是可以使用,但問題已經我在指定欄位後,在Excel選擇多欄後,按下鍵「Delete」鍵就有錯誤訊息出現,但選擇一欄的時後按下「Delete」鍵就無錯誤訊息出現!請如要如何克服?!

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect([A1:A2000,K1:K2000], Target) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target = UCase(Target)
Application.EnableEvents = True
End Sub

1 個回答

0
q00153
iT邦新手 5 級 ‧ 1 月前

應該是 UCase 帶入的非字串類型發生的錯誤
VBA Target 預設如果為單一儲存格,會回傳文字,
若是範圍,會回傳 Range,
但是 Range 無法傳入 UCase。

稍微改了下程式碼如下,
請您參閱。

Private Sub Worksheet_Change(ByVal Target As Range)
    '判斷更動區域是否為 A1:A2000 或 K1:K2000
    If Intersect([A1:A2000,K1:K2000], Target) Is Nothing Then
        Exit Sub
    End If
    
    'Application.ScreenUpdating = False             '關閉螢幕更新
    Application.EnableEvents = False                '關閉事件程序
    'Application.Interactive = False                '禁止交互模式
    Application.DisplayStatusBar = False            '關閉顯示狀態
    Application.Calculation = xlCalculationManual   '關閉自動計算
    
    '判斷為單一儲存格
    With Target
        '範圍列數為 1 列,範圍欄數為 1 欄
        If .Rows.Count = 1 And .Columns.Count = 1 Then
            .Cells.Value = UCase(.Cells.Value) '內容轉大寫
            GoTo e  '跳到結束
        End If
    End With
    
    '範圍儲存格,取得非空值
    On Error Resume Next            '錯誤跳轉到下一句,為了 set 範圍內無內容時的錯誤
    Dim Rng As Range, Cel As Range  '設定變數,類型為區域
    
    With Target
        Set Rng = .SpecialCells(xlCellTypeConstants, 23)    '取得範圍內 "非空白" 的儲存格
        
        If Not Rng Is Nothing Then  '如果有 "非空白" 的儲存格
            For Each Cel In Rng     '遍歷
                With Cel            '儲存格
                    If .Column = 1 Or .Column = 11 Then '如果該儲存格為 A 欄或 K 欄
                        .Value = UCase(.Value)  '內容轉大寫
                    End If
                End With
            Next
        End If
        
        Set Rng = Nothing   '釋放範圍變數
        Set Cel = Nothing
    End With

e:
    Application.ScreenUpdating = True       '開啟事件程序
    Application.EnableEvents = True         '開啟螢幕更新
    Application.Interactive = True          '禁止交互模式
    Application.DisplayStatusBar = True     '開啟顯示狀態
    Application.Calculation = xlAutomatic   '開啟自動計算
End Sub

我要發表回答

立即登入回答