簡體   English   中英

Excel-VBA - 如何識別在Worksheet_Change函數中刪除目標范圍(超過1個單元格)?

[英]Excel-VBA - How to identify Target range (more than 1 cell) is deleted in a Worksheet_Change function?

我試圖找到用戶是否刪除列B中某些單元格中的值,然后使用worksheet_change函數刪除列X中相同行中的單元格。

當我只刪除B列中的一個單元格時,IsEmpty(Target)返回true,我能夠清除X列中的同一行單元格。

但是,當在列B中選擇多個單元格並按刪除按鈕時,IsEmpty(目標)將返回False。 現在這里Target是多個細胞的范圍。 我找不到一種方法來查找用戶是否同時刪除了B列中的值范圍。 任何幫助將非常感激。

下面的代碼在刪除一個單元格時起作用,但在刪除一系列單元格時起作用。

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Column <> 2 Then Exit Sub
    If Target.Columns.Count > 1 Then Exit Sub

    If IsEmpty(Target) Then

        Application.EnableEvents = False
        ActiveSheet.Range("X" & Target.Row & ":X" & Target.Row + Target.Rows.Count - 1).ClearContents
        Application.EnableEvents = True
    End If

End Sub

謝謝Uttam

將相關列復制到隱藏工作表( workSheet.Visible = xlVeryHidden )中,然后使用WorksheetFunction.CountA比較可見工作表列和隱藏工作表“陰影”列中的非空單元格數。 如果包含內容的單元格數量減少(即內容已被刪除),這將快速通知您。

如果是這樣,獲取觀察列的.UsedRange ,找到其中的第一個空單元格,並檢查影子列中的相應單元格是否也為空。 如果是,繼續下一個空單元格; 如果沒有,您知道單元格內容已被刪除,您可以刪除“X列”中相應的單元格內容。

在每個Worksheet_Change事件之后,您需要制作另一個“影子”副本。

你誤解了IsEmpty函數的用途。

我猜你真正想要的是不包含值的單元格(空白單元格)。 以下行將為您提供包含值的單元格計數。 如果它等於零,那么它們都是空白的。

Target.SpecialCells(xlCellTypeConstants).Count

但是,如果所有單元格都為空,則上面的代碼行將導致錯誤。 因此,您必須按如下方式調整代碼:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column <> 2 Then Exit Sub
If Target.Columns.Count > 1 Then Exit Sub

Dim bolIsEmpty As Boolean

On Error GoTo AllAreEmpty
bolIsEmpty = Target.SpecialCells(xlCellTypeConstants).Count = 0
On Error GoTo 0

If bolIsEmpty Then
    ' ... your code here ...
End If

Exit Sub

AllAreEmpty:
    bolIsEmpty = True
    Resume Next

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM