use*_*194 13 excel vba excel-vba
我正在尝试编写一个宏,其中更改任何列应自动保存工作表.
我的Excel表格扩展到了G25.
我尝试了这个,但它不起作用:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("G25")) Is Nothing Then
ActiveWorkbook.Save
End Sub
Run Code Online (Sandbox Code Playgroud)
我保存下来了ThisWorkBook.
任何帮助表示赞赏.
ssa*_*ndo 14
在ThisWorkbook下调用处理程序Workbook_SheetChange并接受两个参数:Sh(类型Object)和目标(a Range).所以,你的代码将无法在那里工作.
如果您将代码放在所需的工作表(例如Sheet1)而不是ThisWorkbook中,请将End If范围更改为"A1:G25"(表示从第1行A列到第25行第25列的方块),它应该工作.这样做:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("A1:G25")) Is Nothing Then
MsgBox "changed"
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
为了完整性,在ThisWorkbook下,这将工作:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("A1:G25")) Is Nothing Then
MsgBox "changed"
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
bre*_*tdj 10
事件不起作用的另一个常见原因是EnableEvents已设置为False
我会像这样编码你的问题
rng1下面创建变量既可以作为早期退出点,也可以作为要使用的范围对象.在Target.Worksheet.Range("A1:G25")工作表事件将工作,但它是实际使用的冗长如果你有一个操作范围,那么对工作表进行任何进一步的更改将触发调用Change事件等,这可能导致Excel崩溃.因此,最好禁用其他事件,运行代码,然后在退出时重新启用事件
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng1 As Range
Set rng1 = Intersect(Target, Range("A1:G25"))
If rng1 Is Nothing Then Exit Sub
Application.EnableEvents = False
'work with rng1
Application.EnableEvents = True
End Sub
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
54788 次 |
| 最近记录: |