我在啟用宏的 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
uj5u.com熱心網友回復:
清除 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
uj5u.com熱心網友回復:
兩個迫在眉睫的問題:
- A
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陣列更快,但對于相對較小的表應該沒問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/405376.html
標籤:
