保存excel文件后运行宏不起作用
Posted
技术标签:
【中文标题】保存excel文件后运行宏不起作用【英文标题】:Run a macro after saving excel-file won't work 【发布时间】:2018-07-10 22:20:36 【问题描述】:我的宏无法在 AfterSave
或 BeforeClose
事件中运行。
我将一张工作表导出到 .csv 文件,当我将此宏链接到按钮时,它已经可以很好地与下一个代码一起使用:
Sub CopyToCSV()
Worksheets("LastLots").UsedRange.Rows("1:5").Calculate
ThisWorkbook.Save
Dim MyPath As String
Dim MyFileName As String
'The path and file names:
MyPath = "D:\Data\PW\2018\"
MyFileName = "LastLots-exported"
'Makes sure the path name ends with "\":
If Not Right(MyPath, 1) = "\" Then MyPath = MyPath & "\"
'Makes sure the filename ends with ".csv"
If Not Right(MyFileName, 4) = ".csv" Then MyFileName = MyFileName & ".csv"
'Copies the sheet to a new workbook:
Sheets("LastLots").Copy
'The new workbook becomes Activeworkbook:
With ActiveWorkbook
Application.DisplayAlerts = False
'Saves the new workbook to given folder / filename:
.SaveAs Filename:= _
MyPath & MyFileName, _
FileFormat:=xlCSV, _
CreateBackup:=False
'Closes the file
.Close False
Application.DisplayAlerts = True
End With
End Sub
上面的代码在一个模块中。正如我所说,当链接到一个按钮并按下该按钮时,它工作得很好。
但我希望它在用户保存文件时运行。
为此,我将下一个代码放在ThisWorkbook
:
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
If Success = True Then
Call CopyToCSV
End If
End Sub
我尝试了各种方法,例如将宏的代码放入AfterSave
-event 中,并在调用CopyToCSV
之前和之后禁用/启用Application.EnableEvents
,但对我没有任何作用...
有人有什么建议吗?我疯了,我在谷歌上找到的每个主题都说要把代码放在ThisWorkbook
,但已经这样做了。
【问题讨论】:
您的子系统中有ThisWorkbook.Save
,因此您肯定需要在调用CopyToCSV
之前禁用事件。您可能以某种方式禁用了事件而没有重新启用它们,因此请确保在 VB 编辑器的直接窗格中输入 Application.EnableEvents = True
并按 Enter - 这将重新启用事件并允许您的 AfterSave 事件触发。
@TimWilliams 感谢您的解决方案!我从子中删除了ThisWorkbook.Save
。由于我的AfterSave
事件,这有点不必要。
【参考方案1】:
只是在某处输入代码并不能使其成为事件处理程序。
您必须输入“ThisWorkbook”,查看顶部栏,选择“ThisWorkbook”和所需的事件。
Excel 将自动为您创建与事件关联的空 Sub。您将代码插入到该 Sub 中。
更多详情:https://www.excelcampus.com/vba/code-modules-event-procedures/
提示:在任何if
之前,测试脚本是否正在运行,添加一条消息如MsgBox "After save!!!"
这将帮助您确定问题是事件未被调用还是您的代码未正确运行。
【讨论】:
您可以只需输入代码(或从 SO 复制/粘贴),只要您做对了...以上是关于保存excel文件后运行宏不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个 Common Lisp 宏不起作用?书上的答题卡错了吗?