清除单元格值时触发VBA宏

时间:2018-01-20 22:08:55

标签: excel vba excel-vba

我正在VBA中运行一个基本的Worksheet_Change子,它检查更改的单元格是否在特定列中,然后自动更新该列。

Public Const startCol = 7 '(declared in a separate module)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = startCol Then
        Target.Columns.AutoFit
    End If
End Sub

我的问题是,只有在单元格中放入某些内容或单元格值发生更改时才会运行此宏,而不是清除单元格值或完全删除单元格时。我还没有找到实现方法,有人可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

尝试以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = startCol Then
        Columns(startCol).AutoFit
    End If
End Sub

答案 1 :(得分:0)

目标是一个范围,然后您可以检查范围的值是否等于"" empy string - >

If Target.Value2 = "" Then MsgBox ("Emptied cell " & Target.Address)

答案 2 :(得分:0)

这是一种解决方案,如果您想要在第7列中更改工作表并删除第7列中的内容(通过删除键),那么这种方式可能是合理的:

在ThisWorkbook部分

Private Sub Workbook_Open()
    Application.OnKey "{DELETE}", "ColFit"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.OnKey "{DELETE}"
End Sub

在模块中

Sub ColFit()
Select Case TypeName(Selection)
    Case "Range"
        Selection.ClearContents
        Worksheets("Sheet1").Columns("G:G").AutoFit
    Case "ChartArea"
        ActiveChart.Parent.Delete
    Case "PlotArea"
        ActiveChart.Parent.Delete
End Select
End Sub

在工作表

Private Sub Worksheet_selectionChange(ByVal Target As Range)
   Worksheets("Sheet1").Columns(startCol).AutoFit
End Sub

保存并重新打开,现在覆盖了更多的基础;)

还考虑(在ThisWorkbook中):

Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    Application.OnKey "{DELETE}", "ColFit"
End Sub

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    Application.OnKey "{DELETE}"
End Sub

可让您无需担心出现多本图书

答案 3 :(得分:0)

<强>解决: 谢谢你的回答,这个简单的改变解决了我的问题:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = startCol Then
        Columns(startCol).AutoFit
    End If
End Sub

所以我不完全确定原因,但是将列的引用从Target.Columns更改为对我的特定列Columns(startCol)的引用修复了它。