由于相同的条件,阻止通过条件参数保存而不阻止 Saveas

Posted

技术标签:

【中文标题】由于相同的条件,阻止通过条件参数保存而不阻止 Saveas【英文标题】:Preventing Save througth conditional arguments without preventing Saveas due to the same conditions 【发布时间】:2019-09-25 20:20:24 【问题描述】:

我有一个我一直在处理的模板。工作表使用我将要讨论的两个主要功能。首先是一个 Save(func),它将文档的副本保存到正确的文件夹,同时保留模板。第二个是 Rev Up 功能,每当对模板进行更改时,都会保存一个新副本,以便保留旧副本。这两个功能都可以完美运行。

问题来自人为错误。当模板打开时很容易点击保存(在excel版本中不是我创建的VBA按钮)或者在关闭模板时弹出“文件未保存”并且再次很容易点击保存。

当有人在桌面上工作时,他们通常会使用电子表格中的预归档,因为其中一些有很多重叠,与从模板开始相比可以节省大量工作。所以我所有的功能都必须保持活跃。在处理预先归档的工作表时,这两个问题都会被放大,因为它们会导致很多错误和丢失工作。

为了解决这个问题,我添加了 3 个功能,它们自己都可以正常工作。

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


If Fileonly = Filename Then    

    Else:
        Cancel = True 'Cancels any request to save the file
        MsgBox "File name does not match part number, Use Rev up button for format changes or use Save button to create new file!"
End If

我希望在点击保存按钮时激活此代码。然后将当前文件名与文件名进行比较,如果文件在那里保存(func)。这段代码正是我想要它做的......等等。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If ThisWorkbook.Saved = False Then

ThisWorkbook.Saved = True
ActiveWorkbook.SaveAs Filename:=*backupfilelocation*

End If

此代码用于抑制文件将自己设置为已保存的“您是否要保存更改”,然后如果您意外保存,它将将该文件的副本保存到备份位置。这段代码再次完美运行。但是Saveas 函数会触发beforesave 代码。然后阻止文件保存。

我还有 2 个其他宏也可以保存文件。我如何允许saveas 在抑制保存功能的同时工作,除非标题匹配。

【问题讨论】:

您的文档是否保存为XLTX “阻止保存但允许另存为”听起来非常非常非常非常像只读,不是吗? 我的文档保存为 XLSM 至于将文档设置为只读,只能解决我的一些问题。该模板是安全的,但在您自己的桌面上工作仍可能危及其他文件夹。如果它通过文件名检查,则再次保存是可以的。 -我已经更新了标题以使其更加清晰。 【参考方案1】:

Workbook_BeforeClose 在保存工作簿之前发生,不管是“保存”还是“另存为...”,如 here 所述

所以这个过程将永远有效,只需放置一个 MsgBox 来押注 ThisWorkbook.Saved 的值来监控它。

如果您想真正“另存为...”,因为您将始终触发此过程,它会在备份保存后添加“另存为...”。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If ThisWorkbook.Saved = False Then
ThisWorkbook.Saved = True
ActiveWorkbook.SaveAs Filename:=*backupfilelocation*
End If
If ThisWorkbook.Saved = False Then ActiveWorkbook.SaveAs

因此,如果您使用“保存”,它将按预期工作,如果您使用“另存为...”,它将创建一个备份文件,但它可以让您正确保存。

希望对你有帮助。

【讨论】:

第二个 If 语句会是真的吗?第一个 if 语句是相同的,并将第二个变为 false。 如果你来自 Save ,那将是真的,因为你不会保存为 windows。如果您来自另存为,它将是错误的,您将获得所需的另存为窗口。

以上是关于由于相同的条件,阻止通过条件参数保存而不阻止 Saveas的主要内容,如果未能解决你的问题,请参考以下文章

如何在库存分配方案中阻止这种竞争条件? [关闭]

如果条件为假,则阻止默认

如果不满足最小和最大条件,则阻止表单提交

RxSwift - 如果满足条件,则阻止/停止/忽略事件

仅在特定条件下被 CORS 策略阻止的 Angular 请求

php 阻止用户提交,必须接受条款和条件复选框才能提交