我正在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
我的问题是,只有在单元格中放入某些内容或单元格值发生更改时才会运行此宏,而不是清除单元格值或完全删除单元格时。我还没有找到实现方法,有人可以帮忙吗?
答案 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)
的引用修复了它。