【问题标题】:VBA SaveAs method not saving file, no errors?VBA SaveAs方法不保存文件,没有错误?
【发布时间】:2015-11-11 11:54:24
【问题描述】:

在任何人对此进行快速标记之前:不,我没有忘记在 GetSaveAsFilename 之后实际保存文件。

基本上,我有一个大型 VBA 模块,它以 Excel 文件开头,处理一堆数据,并在 Excel 中生成摘要。我希望不可能覆盖文件,并且我需要它在所有情况下都可以工作(网络驱动器、从电子邮件打开等)。这就是为什么我认为最好只打开一个 SaveAs 框——将路径的责任留给用户。但是,当我通过启用宏保存来触发此方法时,除了文件本身不保存之外,一切都按预期运行。调试器说 fileName 是在调用 SaveAs 方法时应该是什么,所以我真的很难过。没有抛出任何错误。

感谢任何可以提供帮助的人!我的代码如下:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim fileName As String, oldName As String, fullName As String
Dim fragName() As String, noExtension As String, filePath As String
Dim newName As String

Cancel = True
oldName = ThisWorkbook.Name
fullName = ThisWorkbook.fullName
fragName() = Split(fullName, ".", 2)
noExtension = fragName(0)
filePath = ThisWorkbook.Path & "\"
Application.enableEvents = False

enterName:
fileName = Application.GetSaveAsFilename(InitialFileName:=filePath, _
    FileFilter:="Microsoft Excel Worksheet (*.xlsx), *.xlsx")
On Error GoTo getOut

If fullName = fileName Then
MsgBox ("You have chosen the same name, " & oldName & vbCr _
& ", please choose something different.")
GoTo enterName

ElseIf fileName = "False" Then GoTo getOut

End If

ThisWorkbook.SaveAs (fileName)

getOut:
Application.enableEvents = True
End Sub

【问题讨论】:

  • 我不确定,但我猜问题是这段代码在 workbook_beforesave 事件中。这可能会导致一些无限递归,或者只是不允许在事件中使用 saveas 方法。
  • 您已设置 cancel = true。这会阻止保存工作簿。
  • 我最初认为问题可能是我需要在 SaveAs 方法之前启用事件,但这导致了您所指的无限循环。我在 SaveAs 调用之前添加了“Cancel = False”,但它并没有更好地工作。我认为 Cancel 指的是用户保存事件,这可能与 SaveAs 调用不同——我之前已经使用 Cancel = True 保存了这个子例程。
  • 所以我想为旁观者添加这条评论 - 我不相信这是正确的解决方案。我认为在此子例程中将 Cancel 设置为 False 只会允许原始保存(覆盖)通过。
  • 您可能会在尝试将此文件另存为 .xlsx 文件时遇到问题,因为它包含宏。

标签: vba excel


【解决方案1】:

感谢凯尔对我最初的问题的评论,我发现解决方案是改变

fileName = Application.GetSaveAsFilename(InitialFileName:=filePath, _
FileFilter:="Microsoft Excel Worksheet (*.xlsx), *.xlsx")

到:

fileName = Application.GetSaveAsFilename(InitialFileName:=filePath, _
FileFilter:="Microsoft Excel Macro-Enabled Worksheet (*.xlsm), *.xlsm")

理想情况下,我可以摆脱宏,但这回答了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多