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