Many software products have VBA incorporated into them. This includes Microsoft Office of course, but there are many 3rd-party products which have chosen to include VBA as well. A quick Google search turned up names like AutoCad, WordPerfect, PowerTerm, and ScriptWorx.
If one wishes to use #If/#EndIf directives to design a Sub or Function to work in multiple environments, how can VBA detect which one it’s currently running in..??
This is a bit different than detecting if a product is installed, in which case CreateObject() and an ErrorHandler could be used. Also, checking the References collection would not be definitive, since a VBA project might have multiple references to products other than the current one. For instance, an Access project might have a reference to Excel, and vice-versa (as many of mine do).
Say, I want to write a function that returns the name of the current file. Here’s some pseudo-code using Access and Excel as examples.
Public Function CurrentFilename() As String #If EnvironmentName="Access" Then CurrentFilename = Access.Application.CurrentProject.Fullname #ElseIf EnvironmentName="Excel" Then CurrentFilename = Excel.Application.ActiveWorkbook.Fullname #Else MsgBox "Current VBA software environment is not recognized." #End If End Function
Is this possible..? If so, what’s the magic constant or function to replace ‘EnvironmentName’..?
I believe your best bet will be the
Application.Name property. I can’t confirm it works for all VBA implementations, but it appears to be consistent with MS products.
From the MSDN reference: https://msdn.microsoft.com/en-us/library/office/aa221371(v=office.11).aspx