Excel 清除单元格值时触发VBA宏

Excel 清除单元格值时触发VBA宏,excel,vba,Excel,Vba,我正在VBA中运行一个基本的工作表\u Change sub,它检查更改的单元格是否在特定列中,然后自动调整该列 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 En

我正在VBA中运行一个基本的工作表\u Change sub,它检查更改的单元格是否在特定列中,然后自动调整该列

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
我的问题是,只有在单元格中放入内容或单元格值发生更改时,才会运行此宏,而不是在单元格值被清除或单元格被完全删除时。我还没有找到实现这一点的方法

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

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

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

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


如果Target.Value2=“”,那么MsgBox(“清空单元格”和Target.Address)

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

在此工作簿部分中

在模块中

在工作表上

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

还要考虑(在此工作簿中):

这使您可以处理多本没有问题的书

请尝试以下代码:

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

请注意,即使清除单元格(即使该单元格已为空),也会触发该事件。如果删除空行或空列,也会触发该事件。注意:当VBA更改值而不更改任何选择时,该事件仍然无法捕获:/n仍在处理该选项!(一种方法是在更改单元格时使用select编码……我听说,在可以直接更改单元格值/公式时使用select编码是不好的做法,但在这种情况下,它会很有用。谢谢您的详细回答!我今天将在我的项目中实现这一点。
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
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
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = startCol Then
        Columns(startCol).AutoFit
    End If
End Sub