[英]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
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.