【问题标题】:How can I get the file name from the "Save As" input box (NOT the file dialog) prior to saving?如何在保存之前从“另存为”输入框(不是文件对话框)获取文件名?
【发布时间】:2019-08-13 02:10:57
【问题描述】:

我正在尝试在文件名保存之前对其进行一些验证。

这是我的三个文件保存方案:

  1. 文件 > 保存
  2. 文件 > 另存为 > 浏览 > 保存
  3. 文件 > 另存为 > 保存

其他信息:

正如Workbook_BeforeSave 事件中定义的那样,SaveAsUI 参数将指示是否需要一个对话框来保存更改。

✓ 在场景 1 中,SaveAsUI=False,所以我从 ThisWorkbook.Name 获取文件名

✓ 在场景 2 中,SaveAsUI=True,所以我强制一个对话框并使用 GetSaveAsFilename 方法获取文件名

✗ 在场景 3 中,SaveAsUI=True,但实际上不需要任何中间对话框!该文件会立即保存为在输入框中输入的名称。

...我对此很着迷,这很荒谬,因为我可以覆盖场景 3 并强制进行对话,但我很好奇。有什么想法吗?

【问题讨论】:

  • 我没有看到这个屏幕。这是由最近的 Office 更新引起的。一种选择是像HERE 中提到的那样撤消更新,但是如果您打算将文件发送给其他人并且该人已安装更新,则此选项无用...
  • @SiddharthRout 这不是由最近的更新引起的。我正在运行 Excel 2016,自安装以来,此文件对话框已内置到“另存为”菜单中。此外,我不能强制此宏的所有用户回滚他们的版本。

标签: excel vba


【解决方案1】:

我写这个是为了回答,因为评论区太小了。

我在注册表中找到了提到的文件引用:

HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\User MRU\AD_2B763A186A5179F1E2C2819B76BF6FDEF3F399938D48925BE3381441F2190369\File MRU

您需要查找,或者打开Recent file list,或者找到读取此类注册表项的方法。一种方式(但相当复杂),Shell 命令,您可以在此处看到(命令行命令):

reg query "HKCU\Software\Microsoft\Office\16.0\Excel\User MRU" /s

启动此命令并解析结果可能会对您有所帮助。

【讨论】:

  • 感谢您为我挖掘!我不觉得有必要通过注册表挖掘来找到我正在寻找的东西,但这确实让我重新思考我在寻找这个问题的答案时的词汇量。我们缺少的关键字是“内置对话框”。 ....我在下面的回答中有更多详细信息。谢谢!
【解决方案2】:

我找到了我们缺失的词汇表中缺失的内容:Built-In Dialog Box

正如here 所解释的,在保存完成之前无法从此对话框中获取文件名。

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多