mdlTEST
Option Explicit
Sub GetAllAddIns()
Call GetCOMAddIns
Call GetExcelAddIns
End Sub
' --------------------------------------------------
' Test cComAddIns
' --------------------------------------------------
Sub GetCOMAddIns()
Dim ca As cComAddIns
Dim a() As Variant
Dim i As Long
Set ca = New cComAddIns
If ca.AddInsToArray(a, False) > 0 Then
For i = LBound(a) To UBound(a)
Debug.Print a(i, 2)
Next i
End If
Worksheets("COM AddIns").Cells.ClearContents
ca.AddInsToRange Worksheets("COM AddIns").Range("A2"), True
Set ca = Nothing
End Sub
Sub GetProgIds()
Dim ca As cComAddIns
Dim a() As Variant
Dim i As Long
Set ca = New cComAddIns
If ca.ProgIdsToArray(a) > 0 Then
For i = LBound(a) To UBound(a)
Debug.Print a(i)
Next i
End If
ca.ProgIdsToRange Worksheets("Maintenance").Range("B2")
Set ca = Nothing
End Sub
Sub Test_ComAddIn_Validate()
Dim ca As cComAddIns
Set ca = New cComAddIns
Debug.Print ca.Validate(Range("COMAddIns"), True)
Set ca = Nothing
End Sub
' --------------------------------------------------
' Test cAddIns
' --------------------------------------------------
Sub Test_AddIns_GetNames()
Dim ai As cAddIns
Dim a() As Variant
Dim i As Long
Set ai = New cAddIns
If ai.AddInNamesToArray(a) > 0 Then
For i = LBound(a) To UBound(a)
Debug.Print a(i)
Next i
End If
ai.AddInNamesToRange Worksheets("Maintenance").Range("B2")
Set ai = Nothing
End Sub
Sub GetExcelAddIns()
Dim ai As cAddIns
Dim a() As Variant
Dim i As Long
Set ai = New cAddIns
If ai.AddInsToArray(a, True) > 0 Then
For i = LBound(a) To UBound(a)
Debug.Print a(i, 2)
Next i
End If
Worksheets("Excel AddIns").Cells.ClearContents
ai.AddInsToRange Worksheets("Excel AddIns").Range("A2"), True
Set ai = Nothing
End Sub
Sub Test_AddIn_IsInstalled()
Dim ai As cAddIns
Set ai = New cAddIns
Dim status As AddInStatus
status = ai.IsInstalled("BloombergUI.xla")
'/status = ai.IsInstalled("EUROTOOL.XLAM")
'/status = ai.IsInstalled("Yadda.xla")
Debug.Print ai.IsInstalledToString(status)
Set ai = Nothing
End Sub
' This uses the Excel AddIns names listed in the named range 'AddIns' and
' confirms each is installed and regietered.
' Any Excel AddIns in the list which are not INstalled *and* registered are
' displayed in a message.
Sub Test_AddIn_Validate()
Dim status As AddInStatus
Dim ai As cAddIns
Set ai = New cAddIns
Debug.Print ai.Validate(Range("AddIns"), True)
Set ai = Nothing
End Sub
cAddIns
Option Explicit
Private Const ModName As String = "cAddIns"
Public Enum AddInStatus
Unknown = 0
InstalledAndRegistered = 1
InstalledNotRegistered = 2
NotFound = 3
End Enum
' Validate:
' Loops the passed range of Excel AddIns names and confirms if each is
' installed *and* regietered.
' Any Excel AddIns in the list which are not Installed *and* registered
' are optionally displayed in a message.
'
' This allows you to abort a process if a required addin is not available
'
' > Validate Example:
'
' Dim status As AddInStatus
' Dim ai As cAddIns
'
' Set ai = New cAddIns
'
' If ai.Validate(Range("AddIns"), True) = False Then
' ' Abort process?
' End If
'
' Set ai = Nothing
'
Public Function Validate(ByRef AddInList As Range, ByVal DisplayMessage As Boolean) As Boolean
Const ProcName As String = "Validate"
On Error GoTo ErrorHandler
Dim status As AddInStatus
Dim ReturnValue As Boolean
Dim count As Long
Dim msg As String
Dim cell As Range
msg = "The following Excel Add-Ins are not available:" & vbCrLf & vbCrLf
For Each cell In AddInList.Cells
' ignore blank cells
If Len(cell.value) > 0 Then
status = Me.IsInstalled(cell.value)
If status <> AddInStatus.InstalledAndRegistered Then
count = count + 1
msg = msg & count & ") " & cell.value & vbCrLf
End If
End If
Next cell
If count > 0 Then
If DisplayMessage = True Then
MsgBox msg, vbInformation, AppName
End If
Else
ReturnValue = True
End If
ExitFunction:
Validate = ReturnValue
Exit Function
ErrorHandler:
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
Resume ExitFunction
End Function
' AddInsToRange:
' Populates a range (starting from the Target cell) with a list of Excel Add-Ins
' (*not* COM Add-Ins) and attributes of each.
'
' > AddInsToArray Example:
'
' Dim ca As cComAddIns
' Set ca = New cComAddIns
'
' ca.AddInsToRange Range("A2"), True
'
' Set ca = Nothing
'
Public Function AddInsToRange(ByRef Target As Range, Optional IncludeHeadings As Boolean = False) As Boolean
Const ProcName As String = "AddInsToRange"
On Error GoTo ErrorHandler
Dim a() As Variant
Dim status As Boolean
If Me.AddInsToArray(a(), IncludeHeadings) > 0 Then
Target.Resize(UBound(a), UBound(a, 2)).value = a
End If
status = True
ExitFunction:
AddInsToRange = status
Exit Function
ErrorHandler:
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
Resume ExitFunction
End Function
' AddInsToArray:
' Returns a 2D array with a list of Excel Add-Ins (*not* COM Add-Ins) and attributes of each.
'
' > AddInsToArray Example:
'
' Dim ca As cComAddIns
' Dim a() As Variant
' Dim i As Long
'
' Set ca = New cComAddIns
'
' If ca.AddInsToArray(a, False) > 0 Then
' For i = LBound(a) To UBound(a)
' Debug.Print a(i, 2)
' Next i
' End If
'
' Set ca = Nothing
'
Public Function AddInsToArray(ByRef data() As Variant, Optional IncludeHeadings As Boolean = False) As Long
Const ProcName As String = "AddInsToArray"
On Error GoTo ErrorHandler
Dim Target As Range
Dim ai As AddIn
Dim i As Long
Const ArrayColumns As Integer = 7
ReDim data(1 To Application.AddIns.count, 1 To ArrayColumns)
' If headings have been requested, increase the size of the output array
' and populated the first 'row' with field (column) names
If IncludeHeadings = True Then
i = i + 1
ReDim data(1 To (Application.AddIns.count + 1), 1 To ArrayColumns)
data(i, 1) = "Machine"
data(i, 2) = "Name"
data(i, 3) = "Installed"
data(i, 4) = "Is Open"
data(i, 5) = "File Version"
data(i, 6) = "File Date"
data(i, 7) = "Full Name"
End If
For Each ai In AddIns
i = i + 1
data(i, 1) = Environ("ComputerName")
data(i, 2) = ai.Name
data(i, 3) = ai.Installed
data(i, 4) = ai.IsOpen
data(i, 5) = FileVersion(ai.FullName)
data(i, 6) = FileDate(ai.FullName)
data(i, 7) = ai.FullName
Next ai
ExitFunction:
AddInsToArray = i
Exit Function
ErrorHandler:
i = 0
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
Resume ExitFunction
End Function
' AddInNamesToRange:
' Populates a range (starting from the Target cell) with a list of Excel Add-Ins
' (*not* COM Add-Ins) and attributes of each.
'
' > AddInsToArray Example:
'
' Dim ca As cComAddIns
' Set ca = New cComAddIns
'
' ca.AddInNamesToRange Range("A2")
'
' Set ca = Nothing
'
Public Function AddInNamesToRange(ByRef Target As Range) As Boolean
Const ProcName As String = "AddInNamesToRange"
On Error GoTo ErrorHandler
Dim a() As Variant
Dim status As Boolean
If Me.AddInNamesToArray(a) > 0 Then
Target.Resize(UBound(a), 1).value = WorksheetFunction.Transpose(a)
End If
status = True
ExitFunction:
AddInNamesToRange = status
Exit Function
ErrorHandler:
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
Resume ExitFunction
End Function
Public Function AddInNamesToArray(ByRef data() As Variant) As Long
Const ProcName As String = "AddInNamesToArray"
On Error GoTo ErrorHandler
Dim ai As AddIn
Dim i As Long
ReDim data(1 To Application.AddIns.count)
For Each ai In Application.AddIns
i = i + 1
data(i) = ai.Name
Next ai
ExitFunction:
AddInNamesToArray = i
Exit Function
ErrorHandler:
i = 0
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
Resume ExitFunction
End Function
' IsInstalled:
' Returns one of the 'AddInStatus' Enum values indicating the install status of
' the passed Excel AddIn.
'
' > IsInstalled
' Dim ai As cAddIns
' Set ai = New cAddIns
' Dim status As AddInStatus
'
' status = ai.IsInstalled("BloombergUI.xla")
' Debug.Print ai.IsInstalledToString(status)
'
' Set ai = Nothing
'
Public Function IsInstalled(ByVal AddInName As String) As AddInStatus
Const ProcName As String = "IsConnected"
On Error GoTo ErrorHandler
Dim ai As AddIn
Dim status As AddInStatus
status = AddInStatus.NotFound
For Each ai In Application.AddIns
If ai.Name = AddInName Then
If ai.Installed = True Then
status = AddInStatus.InstalledAndRegistered
Else
status = AddInStatus.InstalledNotRegistered
End If
Exit For
End If
Next ai
ExitFunction:
Set ai = Nothing
IsInstalled = status
Exit Function
ErrorHandler:
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
Resume ExitFunction
End Function
' Converts an ComAddInConnections Enum numerical value to a string.
'
Public Function IsInstalledToString(ByVal status As AddInStatus) As String
Dim value As String
Select Case status
Case AddInStatus.Unknown
value = "Unknown connection status"
Case AddInStatus.InstalledAndRegistered
value = "Installed and Registered"
Case AddInStatus.InstalledNotRegistered
value = "Installed but not Registered"
Case AddInStatus.NotFound
value = "AddIn Not Found"
Case Else
value = "Unknown Installation Type"
End Select
IsInstalledToString = value
End Function
' Uses File System Object to return the passed file's version number (if any)
'
Private Function FileVersion(ByVal FileName As String)
On Error GoTo ErrorHandler
Dim ver As String
Dim fso As Object ' FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
ver = fso.GetFileVersion(FileName)
If Len(ver) = 0 Then
ver = "No File Version"
End If
ExitFunction:
Set fso = Nothing
FileVersion = ver
Exit Function
ErrorHandler:
ver = "Can't get File Version"
Resume ExitFunction
End Function
' Returns the passed file's last modified or creation date
'
Private Function FileDate(ByVal FileName As String)
On Error Resume Next
Dim dte As String
dte = FileDateTime(FileName)
If Len(dte) = 0 Then
dte = "Unknown Date"
End If
FileDate = dte
End Function
cComAddIns
Option Explicit
Option Compare Text
Private Const ModName As String = "cComAddIns"
' cComAddIns
' Sections of code to determnine the DLL file name of a COM AddIn (based on the progID) were sourced from:
' https://www.cpearson.com/excel/DLLNameOfComAddin.htm
' This function takes as its input parameter a reference to an existing COM AddIn
' and returns a string containing the fully-qualified DLL file name of that COM Add-In.
' The COM Addin need not be connected.
'
' This module is entirely self-contained. It requires no additional support code.
' This code may be in any Office application that supports VBA6 (Office 2000 and later).
Public Enum ComAddInStatus
Unknown = 0
InstalledConnected = 1
InstalledNotConnected = 2
NotFound = 3
End Enum
' -- Constants
' Misc constants.
Private Const C_COM_ADDIN_CLSID_REG_LOCATION = "SOFTWARE\Classes\CLSID\"
Private Const C_COM_ADDIN_CLSID_REG_VALUE_NAME = "InprocServer32"
Private Const C_PATH_SEPARATOR = "\"
Private Const ERROR_SUCCESS As Long = 0
' Windows mandated value.
Private Const MAX_PATH As Long = 260
' Registry Sections
Private Const HKEY_LOCAL_MACHINE As Long = &H80000002
' -- Windows API DeclarATIONS
'
' RegOpenKey opens an existing registry key, named in lpSubKey. It populates
' phkResult with a key value that is used by the other registry functions.
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
(ByVal hKey As Long, ByVal lpSubKey As String, ByRef phkResult As Long) As Long
' RegCloseKey closes a registry key previously opened with RegOpenKey.
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
' RegQueryValue reads the value of a registry item, opened with RegOpenKey.
Private Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" _
(ByVal hKey As Long, ByVal lpSubKey As String, _
ByVal lpValue As String, ByRef lpcbValue As Long) As Long
Public Function Description(ByVal AddInProgId As String) As String
Const ProcName As String = "Description"
On Error GoTo ErrorHandler
Dim c As ComAddIn
Dim value As String
Set c = Application.COMAddIns(AddInProgId)
value = c.Description
ExitFunction:
Set c = Nothing
Description = value
Exit Function
ErrorHandler:
Select Case Err.Number
Case 9 ' Subscript out of range
value = "COM AddIn Not Found"
Case Else
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
End Select
Resume ExitFunction
End Function
Public Function FileName(ByVal AddInProgId As String) As String
Const ProcName As String = "FileName"
On Error GoTo ErrorHandler
Dim c As ComAddIn
Dim value As String
Set c = Application.COMAddIns(AddInProgId)
value = ComAddInFile(c)
ExitFunction:
Set c = Nothing
FileName = value
Exit Function
ErrorHandler:
Select Case Err.Number
Case 9 ' Subscript out of range
value = "COM AddIn Not Found"
Case Else
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
End Select
Resume ExitFunction
End Function
' This function returns the fully-qualified name of the DLL file for the
' specified COM Add-In (CAI).
' ComAddIn is a reference to an existing CAI.
' It is not required that the AddIn be connected.
Public Function ComAddInFile(ComAddIn As Office.ComAddIn) As String
Const ProcName As String = "ComAddInFile"
On Error GoTo ErrorHandler
Dim RegistryKeyName As String ' stores the name of the registry key we're working with
Dim RegResult As String ' stores the name of the COM Add-In's DLL file.
Dim Res As Long ' general puprose return code variable
Dim RegKey As Long ' internal registry key value retrieved by RegOpenKey
Dim ErrorNumber As Long ' stores the error number than may have occurred
Dim RegResultLen As Long ' length in characters of RegResult
' Initialize the string we're going to populate with the DLL name.
' The buffer must be long enough to store the complete DLL file name.
' MAX_PATH is a Windows mandated length, the maximum length of a fully qualified file name.
RegResult = String$(MAX_PATH, vbNullChar)
' ensure we didn't get NOTHING
If ComAddIn Is Nothing Then
MsgBox "The ComAddIn parameter is NOTHING."
GoTo ExitFunction
End If
' Initialise the registry key name. It will contain a string similar to:
'
' SOFTWARE\Classes\CLSID\{F0E54810-A875-4C54-9697-0AE40DAA7316}\InprocServer32
'
' We will look up this key in the HKEY_LOCAL_MACHINE section
' of the registry.
RegistryKeyName = C_COM_ADDIN_CLSID_REG_LOCATION & ComAddIn.GUID & _
C_PATH_SEPARATOR & C_COM_ADDIN_CLSID_REG_VALUE_NAME
' Open the registry key RegistryKeyName.
' RegOpenKey puts in RegKey a key value that is used by all other
' registry functions that access that key.
Res = RegOpenKey(hKey:=HKEY_LOCAL_MACHINE, _
lpSubKey:=RegistryKeyName, phkResult:=RegKey)
If Res <> ERROR_SUCCESS Then
ErrorNumber = Res
RegResult = "Couldn't open the registry key."
'/Debug.Print RegResult & ": " & RegistryKeyName & " for " & ComAddIn.progID
GoTo ExitFunction
End If
' Get the value from the registry.
' Set lpSubKey:=vbNullString to get the default value, which is the DLL file name.
' RegResultLen is the length in characters of RegResult,
' the variable that will receive the DLL file name.
RegResultLen = MAX_PATH
Res = RegQueryValue(hKey:=RegKey, lpSubKey:=vbNullString, _
lpValue:=RegResult, lpcbValue:=RegResultLen)
If Res <> ERROR_SUCCESS Then
ErrorNumber = Res
RegResult = "Couldn't open the registry key."
RegCloseKey hKey:=RegKey
GoTo ExitFunction
End If
' close our registry key
RegCloseKey RegKey
' trim RegResult to the vbNullChar
RegResult = TrimNull(RegResult)
ExitFunction:
' return the DLL file name
ComAddInFile = RegResult
Exit Function
ErrorHandler:
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
Resume ExitFunction
End Function
' TrimToNull
' This function returns the portion of Text that is to the left of the vbNullChar
' character (same as Chr(0)). Typically, this function is used with strings
' populated by Windows API procedures. It is generally not used for
' native VB Strings.
' If vbNullChar is not found, the entire Text string is returned.
Private Function TrimNull(Text As String) As String
Dim Pos As Integer
Pos = InStr(1, Text, vbNullChar)
If Pos > 0 Then
TrimNull = Left(Text, Pos - 1)
Else
TrimNull = Text
End If
End Function
' Validate:
' Loops the passed range of Excel AddIns names and confirms if each is
' installed *and* regietered.
' Any Excel AddIns in the list which are not Installed *and* registered
' are optionally displayed in a message.
'
' This allows you to abort a process if a required addin is not available
'
' > Validate Example:
'
' Dim ca As cComAddIns
' Set ca = New cComAddIns
'
' If ca.Validate(Range("COMAddIns"), True) = False Then
' ' Abort process?
' End If
'
' Set ca = Nothing
'
Public Function Validate(ByRef AddInList As Range, ByVal DisplayMessage As Boolean) As Boolean
Const ProcName As String = "Validate"
On Error GoTo ErrorHandler
Dim ReturnValue As Boolean
Dim status As ComAddInStatus
Dim msg As String
Dim cell As Range
Dim count As Long
msg = "The following COM Add-Ins are not available:" & vbCrLf & vbCrLf
For Each cell In Range("COMAddIns").Cells
' ignore blank cells
If Len(cell.value) > 0 Then
status = Me.IsConnected(cell.value)
If status <> InstalledConnected Then
count = count + 1
msg = msg & count & ") " & cell.value & vbCrLf
End If
End If
Next cell
If count > 0 Then
If DisplayMessage = True Then
MsgBox msg, vbInformation, AppName
End If
Else
ReturnValue = True
End If
ExitFunction:
Validate = ReturnValue
Exit Function
ErrorHandler:
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
Resume ExitFunction
End Function
' Returns an array populated with a list of COM AddIns installed the current PC.
' Also returns the connect status of each COM Add-In.
' Optionally includes the columns headings in the array (usefule for pasting to a range.
Public Function AddInsToRange(ByRef Target As Range, Optional IncludeHeadings As Boolean = False) As Long
Const ProcName As String = "AddInsToRange"
On Error GoTo ErrorHandler
Dim a() As Variant
Dim status As Boolean
If Me.AddInsToArray(a, IncludeHeadings) > 0 Then
Target.Resize(UBound(a), UBound(a, 2)).value = a
End If
status = True
ExitFunction:
AddInsToRange = status
Exit Function
ErrorHandler:
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
log.ShowMessage Err, ModName, ProcName, Erl
Resume ExitFunction
End Function
Public Function ProgIdsToRange(ByRef Target As Range) As Boolean
Const ProcName As String = "ProgIdsToRange"
On Error GoTo ErrorHandler
Dim status As Boolean
Dim a() As Variant
If Me.ProgIdsToArray(a) > 0 Then
Target.Resize(UBound(a), 1).value = WorksheetFunction.Transpose(a)
status = True
End If
ExitFunction:
ProgIdsToRange = status
Exit Function
ErrorHandler:
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
log.ShowMessage Err, ModName, ProcName, Erl
Resume ExitFunction
End Function
Public Function ProgIdsToArray(ByRef data() As Variant) As Long
Const ProcName As String = "ProgIdsToArray"
On Error GoTo ErrorHandler
Dim c As ComAddIn
Dim i As Long
ReDim data(1 To Application.COMAddIns.count)
For Each c In Application.COMAddIns
i = i + 1
data(i) = c.progID
Next c
ExitFunction:
ProgIdsToArray = i
Exit Function
ErrorHandler:
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
log.ShowMessage Err, ModName, ProcName, Erl
Resume ExitFunction
End Function
' Returns an array populated with a list of COM AddIns installed the current PC.
' Also returns the connect status of each COM Add-In.
' Optionally includes the columns headings in the array (usefule for pasting to a range.
Public Function AddInsToArray(ByRef data() As Variant, Optional IncludeHeadings As Boolean = False) As Long
Const ProcName As String = "AddInsToArray"
On Error GoTo ErrorHandler
Dim c As ComAddIn
Dim FileName As String
Dim i As Long
Const ArrayColumns As Integer = 8
' a(Rows, Colouns)
ReDim data(1 To Application.COMAddIns.count, 1 To ArrayColumns)
' If headings have been requested, increase the size of the output array
' and populated the first 'row' with field (column) names
If IncludeHeadings = True Then
i = i + 1
ReDim data(1 To (Application.COMAddIns.count + 1), 1 To ArrayColumns)
data(i, 1) = "Machine"
data(i, 2) = "Description"
data(i, 3) = "Connection"
data(i, 4) = "File Version"
data(i, 5) = "File Date"
data(i, 6) = "GUID"
data(i, 7) = "ProgID"
data(i, 8) = "File Name"
End If
For Each c In Application.COMAddIns
i = i + 1
FileName = Me.ComAddInFile(ComAddIn:=c)
data(i, 1) = Environ("ComputerName")
data(i, 2) = c.Description
data(i, 3) = Me.IsConnectedToString(Me.IsConnected(c.progID))
data(i, 4) = FileVersion(FileName)
data(i, 5) = FileDate(FileName)
data(i, 6) = c.GUID
data(i, 7) = c.progID
data(i, 8) = FileName
Next c
ExitFunction:
AddInsToArray = i
Exit Function
ErrorHandler:
i = 0
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
Resume ExitFunction
End Function
' Determines if the nominated COM AddIn (based on the AddIn's progID) is connected.
' Returns a value in the ComAddInConnections enumerator.
' The default value is Enum 'Unknown'.
' If the passed progID is not recognised, this will return Enum 'NotFound'
'
Public Function IsConnected(ByVal AddInProgId As String) As ComAddInStatus
Const ProcName As String = "IsConnected"
On Error GoTo ErrorHandler
Dim c As ComAddIn
Dim status As ComAddInStatus
status = ComAddInStatus.Unknown
Set c = Application.COMAddIns(AddInProgId)
If c.Connect = True Then
status = ComAddInStatus.InstalledConnected
Else
status = ComAddInStatus.InstalledNotConnected
End If
ExitFunction:
Set c = Nothing
IsConnected = status
Exit Function
ErrorHandler:
Select Case Err.Number
Case 9 ' Subscript out of range
status = ComAddInStatus.NotFound
Case Else
log.LogError ThisWorkbook, ModName, ProcName, Err.Number, Err.Description, Erl
End Select
Resume ExitFunction
End Function
' Converts an ComAddInConnections Enum numerical value to a string.
'
Public Function IsConnectedToString(ByVal status As ComAddInStatus) As String
Dim value As String
Select Case status
Case Unknown
value = "Unknown connection status"
Case InstalledConnected
value = "Connected"
Case InstalledNotConnected
value = "Not Connected"
Case NotFound
value = "AddIn Not Found"
Case Else
value = "Unknown connection type"
End Select
IsConnectedToString = value
End Function
' Uses File System Object to return the passed file's version number (if any)
'
Private Function FileVersion(ByVal FileName As String) As String
On Error GoTo ErrorHandler
Dim ver As String
Dim fso As Object ' FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
ver = fso.GetFileVersion(FileName)
If Len(ver) = 0 Then
ver = "No File Version"
End If
ExitFunction:
Set fso = Nothing
FileVersion = ver
Exit Function
ErrorHandler:
ver = "Can't get File Version"
Resume ExitFunction
End Function
' Returns the passed file's last modified or creation date
'
Private Function FileDate(ByVal FileName As String) As String
On Error Resume Next
Dim dte As String
dte = FileDateTime(FileName)
If Len(dte) = 0 Then
dte = "Unknown Date"
End If
FileDate = dte
End Function
Worksheets
Excel AddIns
Cell | Value |
---|---|
A2 | Machine |
B2 | Name |
C2 | Installed |
D2 | Is Open |
E2 | File Version |
F2 | File Date |
G2 | Full Name |
COM AddIns
Cell | Value |
---|---|
A2 | Machine |
B2 | Description |
C2 | Connection |
D2 | File Version |
E2 | File Date |
F2 | GUID |
G2 | Prog ID |
H2 | File Name |