Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
Solved

VBS to check if Visio file open and if so close it

Posted on 2016-11-11
Medium Priority
196 Views
Option Explicit
MacroExample

Sub MacroExample()

Dim AppVisio
Set AppVisio = CreateObject("visio.InvisibleApp")
Dim vsoDoc

Set vsoDoc = AppVisio.Documents.Open("PathName\Drawing1.vsd")

vsoDoc.ExecuteLine ("PageSel")

vsoDoc.close
appvisio.quit
Set vsoDoc = Nothing
set AppVisio = nothing
End Sub


Hi Experts,

I have the following code in a VBS/VB Script file which works to open another Visio file. The issue seems to be that it is not working when the file was already opened. Currently if file is open, it runs but does not call the macro (in the code)

Is there a one liner/force close the specific file if it was opened by the user already?

Appreciate help!
0
Question by:Dingo212
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 2

LVL 20

Expert Comment

ID: 41884490
First thing you need to do is to use the get object instead which will try to find an existing already open Visio.

Dim AppVisio As Visio.Application

On Error Resume Next

Set AppVisio = GetObject(, "visio.application")

If AppVisio Is Nothing Then
Set AppVisio = CreateObject("visio.application")
End If


Source of the code and explanation is here.

The above is pretty standard for all office programs.  The next part I honestly have never done as I have never needed to code for Visio, but it all seems similar to Word.

If you successfully use the get object method then Visio is already running.  Then you use the Documents collection. If it has a count of more than 0, then something is already open.  You need to loop through this list and check what is open.  Each item in the documents collection will be a Document from which you can check its Name for example to see if it is the same document you want.

Alternatively you could use the ActiveDocument property which would give you the currently active document the user is using.

You MAY be able to use the openEX to open a second version of the same document, but I doubt it.
0

LVL 57

Accepted Solution

Bill Prew earned 2000 total points
ID: 41884704
This seems to be working close to what I think you described, adjust and try it out there and see how it goes.

Option Explicit

MacroExample

Sub MacroExample()
' Define local variables
Dim objVisio
Dim objDoc
Dim blnVisioCreated

' Initialize Vision application reference variable
Set objVisio = Nothing

' Assume Visio is already running, then try and get a reference to it
blnVisioCreated = False
On Error Resume Next
Set objVisio = GetObject(, "Visio.Application")
On Error Goto 0

' If Visio was not running already load it and remember that we created it
If objVisio Is Nothing Then
Set objVisio = CreateObject("Visio.InvisibleApp")
blnVisioCreated = True
End If

' See if out drawing is already open, if so close it
For Each objDoc In objVisio.Documents
If LCase(objDoc.Name) = "ee28982576.vsdm" Then
objDoc.Close
Exit For
End If
Next

' Open desired drawing
Set objDoc = objVisio.Documents.Open("b:\ee\ee28982576\ee28982576.vsdm")

' Execute macro
objDoc.ExecuteLine("PageSel")

' Close our drawing
objDoc.Close

' If we loaded Visio then exit it now
If blnVisioCreated = True Then
objVisio.Quit
End If
End Sub

~bp
0

Author Closing Comment

ID: 41886490
Thank you
0

Author Comment

ID: 41886491

   ' Close our drawing
objDoc.Close [b]false[/b]


To close file without saving

I also have regrets on not giving some points to others who have given some input. My apologies. I am back in here after a while and the new way of assigning points messed it up!
0

Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Meetings to discuss business process can waste time, and often do .  The meeting's dialog can get confusing when participants have different professional perspectives and backgrounds.  A jointly-developed process picture helps wade through the confu…
When you see single cell contains number and text, and you have to get any date out of it seems like cracking our heads.
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…
Have you created a query with information for a calendar? ... and then, abra-cadabra, the calendar is done?! I am going to show you how to make that happen. Visualize your data!  ... really see it To use the code to create a calendar from a q…
Suggested Courses
Course of the Month9 days, 17 hours left to enroll