【问题标题】:save and close visio documents visual basic macro保存并关闭 visio 文档 visual basic 宏
【发布时间】:2010-10-13 12:09:50
【问题描述】:

我想创建一个 visio 页面,添加一些形状,用给定的文件名存储它并关闭它。

目前,对象/模板工具栏始终处于活动状态,因此存储在给定文件名下。

存储当前图形的最佳方式是什么? 谢谢

Dim visioApp, visioPage as Object
Set visioApp = CreateObject("visio.application")

visioApp.Documents.AddEx ("")      
Set visioPage = visioApp.ActiveWindow.Page
Set visioStencil = visioApp.Documents.Add("BASFLO_M.VSS")

' add shapes

visioApp.ActiveDocument.SaveAs ("c:\.......vsd")
visioApp.ActiveDocument.Close

【问题讨论】:

    标签: excel visio vba


    【解决方案1】:

    正如您所指出的,当您打开模板时,活动文档会发生变化。您可以将其更改回您正在编辑的文档,如下所示:

    Set visioApp = CreateObject("visio.application")
    
    visioApp.Documents.AddEx ("")
    Set visioPage = visioApp.ActiveWindow.Page
    
    ' Remember which window is active '
    Set visioWindow = visioApp.ActiveWindow
    
    Set visioStencil = visioApp.Documents.Add("BASFLO_M.VSS")
    
    ' Reactivate the drawing window '
    visioWindow.Activate
    
    visioPage.Drop visioStencil.Masters(1), 4, 4
    
    visioApp.ActiveDocument.SaveAs "c:\temp\mydoc.vsd"
    visioApp.ActiveDocument.Close
    

    您还可以使用对您创建的文档对象的引用,而不依赖于活动文档:

    Set visioApp = CreateObject("visio.application")
    
    ' Get a reference to the docment you are creating'
    Set visioDoc = visioApp.Documents.AddEx("")
    Set visioPage = visioApp.ActiveWindow.Page
    Set visioStencil = visioApp.Documents.Add("BASFLO_M.VSS")
    
    visioPage.Drop visioStencil.Masters(1), 4, 4
    
    ' Use the document object, not the active document '
    visioDoc.SaveAs "c:\temp\mydoc1.vsd"
    visioDoc.Close
    

    我有最后一个建议。我建议您根据基本流程图模板创建一个新文档,而不是创建一个新文档,然后再创建一个模板。通过这样做,您可以创建一个文档,其网格、字体等的默认设置与您在用户界面中选择该模板时创建的基本流程图相同。使用模板的另一个好处是,每次重新打开您创建的文档时,流程图模板都会在文档的工作区中打开。试试这个:

    Set visioApp = CreateObject("visio.application")
    
    ' BASFLO_M.VST is the filename of the Basic Flowchart Template (metric) '
    Set visioDoc = visioApp.Documents.Add("BASFLO_M.VST")
    Set visioPage = visioApp.ActiveWindow.Page
    
    ' The stencil will be already open as part of the BASFLO_M.VST workspace '
    Set visioStencil = visioApp.Documents("BASFLO_M.VSS")
    
    visioPage.Drop visioStencil.Masters(1), 4, 5
    visioPage.Drop visioStencil.Masters(1), 5, 4
    
    visioDoc.SaveAs "c:\temp\mydoc2.vsd"
    visioDoc.Close
    

    【讨论】:

    • 非常感谢您的精彩回答!
    猜你喜欢
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多