【问题标题】:MS Visio OpenEx method, open method flagsMS Visio OpenEx 方法,打开方法标志
【发布时间】:2022-01-25 23:10:24
【问题描述】:

Documents.OpenEx method (Visio) 可以有一些标志,如果我想隐藏打开用户已经在 Visio 中打开的文件怎么办?

我尝试使用 visOpenCopy 标志,但在这种情况下,我遇到了另一个问题 - 在随后调用 Document.ExportAsfixedFormat 以在结果文档中以 PDF 格式保存文档时,文件属性(标题、作者、主题和其他)不保存。

我分别尝试了标志visOpenCopyvisOpenRovisOpenHidden 的所有可能组合。已在另一个程序中打开的文件未在 Documents.OpenEx 中打开,或者属性未保存为 Pdf。

显而易见的解决方案似乎是在打开之前手动将文件复制到 TEMP 中,但也许有人会更好地告诉解决方案。

在 Office 2016 和 2013 64 位中测试

添加:

    // docs.microsoft.com/en-us/office/vba/api/visio.documents.openex
    fVisioDoc := fVisioApp.Documents.OpenEx(Input,           0 or         0 or             0);     // does not open, properties is saved
    fVisioDoc := fVisioApp.Documents.OpenEx(Input,           0 or         0 or visOpenHidden);     // does not open, properties is saved
    fVisioDoc := fVisioApp.Documents.OpenEx(Input,           0 or visOpenRo or             0);     // does not open, properties is saved
    fVisioDoc := fVisioApp.Documents.OpenEx(Input,           0 or visOpenRo or visOpenHidden);     // does not open, properties is saved
    fVisioDoc := fVisioApp.Documents.OpenEx(Input, visOpenCopy or         0 or             0);     // open, properties is absent 
    fVisioDoc := fVisioApp.Documents.OpenEx(Input, visOpenCopy or         0 or visOpenHidden);     // open, properties is absent 
    fVisioDoc := fVisioApp.Documents.OpenEx(Input, visOpenCopy or visOpenRo or             0);     // open, properties is absent 
    fVisioDoc := fVisioApp.Documents.OpenEx(Input, visOpenCopy or visOpenRo or visOpenHidden);     // open, properties is absent 
        
    // docs.microsoft.com/en-us/office/vba/api/visio.documents.addex
    fVisioDoc := fVisioApp.Documents.AddEx(Input, 0,           0 or         0 or             0);   // open, properties is absent
    fVisioDoc := fVisioApp.Documents.AddEx(Input, 0,           0 or         0 or visOpenHidden);   // open, properties is absent
    fVisioDoc := fVisioApp.Documents.AddEx(Input, 0,           0 or visOpenRo or             0);   // open, properties is absent
    fVisioDoc := fVisioApp.Documents.AddEx(Input, 0,           0 or visOpenRo or visOpenHidden);   // open, properties is absent
    fVisioDoc := fVisioApp.Documents.AddEx(Input, 0, visOpenCopy or         0 or             0);   // open, properties is absent
    fVisioDoc := fVisioApp.Documents.AddEx(Input, 0, visOpenCopy or         0 or visOpenHidden);   // open, properties is absent
    fVisioDoc := fVisioApp.Documents.AddEx(Input, 0, visOpenCopy or visOpenRo or             0);   // open, properties is absent
    fVisioDoc := fVisioApp.Documents.AddEx(Input, 0, visOpenCopy or visOpenRo or visOpenHidden);   // open, properties is absent
        
        
    // docs.microsoft.com/en-us/office/vba/api/Visio.Document.ExportAsFixedFormat
    fVisioDoc.ExportAsFixedFormat(
            visFixedFormatPDF,   // FixedFormat
            Output,       // OutputFileName

【问题讨论】:

  • 你试过AddEx吗? Documents.AddEx method (Visio)
  • 我测试了AddEx 方法,在这种情况下,文档无论如何都会打开,但属性无论如何都不会保存在 pdf 中。

标签: vba visio


【解决方案1】:

我认为这可能是正确的行为。如果您指定visOpenCopy,则打开文档的副本。但副本不会自动“继承”“主题”或“主题”等属性。这些特定于文档(文件)。因此,对于新文档,它们将被清除,您可能需要从头开始设置它们。如果您使用用户界面执行“另存为...”,也会发生这种情况。

为什么不导出当前(已经打开)的文档?或者,您建议的方法(将文件复制到 temp 然后从那里打开它们)听起来很合理。

【讨论】:

  • 这不完全正确,我说的是文档的属性,而不是文件,它们是在“另存为...”时复制的。
  • 这不完全正确,我说的是文档的属性,而不是文件,它们是在“另存为...”时复制的。我无法保存已经打开的文档,因为它是由用户打开的,并且他们已经可以对其进行更改。将文档复制到临时文件是一种“工作拐杖”,如果没有更好的办法,您将不得不使用它。然而 - 其他 MS Office 应用程序:Word、Excel、PowerPoint,也不能避免这样的问题。
  • 是的,你是对的,我的错误 - 当你执行“另存为..”时,文档属性被复制,混淆了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多