保存excel文件后运行宏不起作用

Posted

技术标签:

【中文标题】保存excel文件后运行宏不起作用【英文标题】:Run a macro after saving excel-file won't work 【发布时间】:2018-07-10 22:20:36 【问题描述】:

我的宏无法在 AfterSaveBeforeClose 事件中运行。

我将一张工作表导出到 .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文件后运行宏不起作用的主要内容,如果未能解决你的问题,请参考以下文章

电子生成器自定义 NSIS 包含脚本宏不起作用

为啥我的简单 C 宏不起作用?

为 UIFont 定义宏不起作用

为啥这个 Common Lisp 宏不起作用?书上的答题卡错了吗?

为啥这个在 Common Lisp 中漂亮地打印宏扩展的宏不起作用?都有哪些替代工具?

如何在 VS 2010 中出现第一个错误时停止 C# 编译(VS 2008 宏不起作用)!