簡體   English   中英

根據特定單元格值清除 Excel 表中的列內容

[英]Clear column content in Excel table based on specific cell value

我在啟用宏的 excel 文件中有下表,

表格1:

在此處輸入圖像描述

我的目標是:

在關閉此工作簿之前,我需要清除 D 列內容(在表 1 中顯示為“第 4 列”),僅當 D 列單元格值 = 999 時。例如,查看上面的屏幕截圖 - D2 和 D4 中的單元格內容必須當“關閉工作簿”事件觸發時被清除。

重要 - 如果用戶將在此表中創建新記錄,則 D 列下的任何新單元格也可能具有 999 值。 如果新記錄在 D 列中包含單元格值 = 999 - 必須將其清除! 必須清除 D 列中單元格值 = 999 的任何新記錄!

查看我期望的更新圖片 -

單元格 D2、D4 和 D7(在此 tbl 中創建新記錄之后)具有 999 值並被清除:

在此處輸入圖像描述

使用以下 vba 代碼,但它不起作用:

     Private Sub Workbook_BeforeClose(Cancel As Boolean)

        Dim sht As Worksheet
        Set sht = ThisWorkbook.ActiveSheet

        If Worksheets("Sheet1").ListObjects("Table1").Columns(4).Value = 999 Then
           Worksheets("Sheet1").ListObjects("Table1").Columns(4).ClearContents
  
        End If

    End Sub

清除 Excel 表中的值

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Dim ws As Worksheet: Set ws = Me.Worksheets("Sheet1")
    Dim tbl As ListObject: Set tbl = ws.ListObjects("Table1")
    Dim lcl As ListColumn: Set lcl = tbl.ListColumns("Column 4") ' 4
        
    lcl.DataBodyRange.Replace 999, Empty, xlWhole
    
End Sub

編輯

  • 如果您想在工作簿已保存時避免出現“保存警報對話框”,您可以通過以下方式進行改進:
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
    Dim IsSaved As Boolean: IsSaved = Me.Saved
    
    Dim ws As Worksheet: Set ws = Me.Worksheets("Sheet1")
    Dim tbl As ListObject: Set tbl = ws.ListObjects("Table1")
    Dim lcl As ListColumn: Set lcl = tbl.ListColumns("Column 4") ' 4
        
    lcl.DataBodyRange.Replace 999, Empty, xlWhole
    
    If IsSaved Then Me.Save
    
End Sub

兩個迫在眉睫的問題:

  • ListObject沒有Columns屬性,而是ListColumns屬性。
  • 循環* ListColumn.DataBodyRange中的單元格,而不是嘗試將整個列與 999 進行比較。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim tbl As ListObject
    Set tbl = Me.Worksheets("Sheet1").ListObjects("Table1")
    
    Dim cell As Range
    For Each cell In tbl.ListColumns(4).DataBodyRange
        If cell.Value = 999 Then 
            cell.ClearContents
        End If
    Next
End Sub

* 這可以使用Variant數組更快,但對於相對較小的表應該沒問題。

暫無
暫無

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

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