VBA - Snippets
Message_CustomDoesNotExist
Public Sub Message_PropertyCustomDoesNotExist( _
ByVal sPropertyName As String)
Dim sMessage As String
sMessage = "The custom workbook property '" & sPropertyName & "' does not exist."
Call MsgBox(sMessage, vbOKOnly + vbInformation, "Property")
Call Tracer_Add("MESSAGE", sMessage)
End Sub
Message_NoWorkbooksOpen
Public Sub Message_NoWorkbooksOpen( _
Optional ByVal bInformUser As Boolean = False)
Dim sMessage As String
sMessage = "There are no workbooks currently open."
If (bInformUser = True) Then
Call MsgBox(sMessage, vbOKOnly + vbInformation, "No Workbook")
End If
Call Tracer_Add("MESSAGE", sMessage)
End Sub
Message_WorkbookIsSharedRemoveSharingFirst
Public Sub Message_WorkbookIsSharedRemoveSharingFirst()
Dim sMessage As String
sMessage = "You are unable to create or format charts in a shared workbook."
Call MsgBox(sMessage, vbOKOnly + vbInformation, "Shared Workbook")
Call Tracer_Add("MESSAGE", sMessage)
End Sub
Message_WorkbookNotSaved
Public Sub Message_WorkbookNotSaved()
Dim sMessage As String
sMessage = "You must save your Excel workbook first."
Call MsgBox(sMessage, vbOKOnly + vbInformation, "Workbook Not Saved")
Call Tracer_Add("MESSAGE", sMessage)
End Sub
Property_CustomAdd
Public Function Property_CustomAdd( _
ByVal sPropertyName As String, _
ByVal vPropertyValue As Variant, _
Optional ByVal sPropertyType As String = "Text", _
Optional ByVal sWbkName As String = "", _
Optional ByVal bCheckExists As Boolean = True) _
As Boolean
Const sPROCNAME As String = "Property_CustomAdd"
Dim oDocumentProperties As Office.DocumentProperties
Dim oDocumentProperty As Office.DocumentProperty
Dim oPropertyType As MsoDocProperties
On Error GoTo ErrorHandler
Call Tracer_AddSubroutineStart(msMODULENAME, sPROCNAME)
Set oDocumentProperties = ActiveWorkbook.CustomDocumentProperties
If (bCheckExists = True) Then
If (Property_CustomExists(sPropertyName, False) = True) Then
Property_CustomAdd = False
Exit Function
End If
End If
If (sPropertyType = "Text") Then oPropertyType = MsoDocProperties.msoPropertyTypeString
Set oDocumentProperty = oDocumentProperties.Add(Name:=sPropertyName, _
LinkToContent:=False, _
Type:=oPropertyType, _
Value:=vPropertyValue)
Property_CustomAdd = True
Exit Function
ErrorHandler:
Call Error_Handle(msMODULENAME, sPROCNAME, Err.Number, Err.Description)
Property_CustomAdd = False
End Function
Property_CustomDelete
Public Sub Property_CustomDelete( _
ByVal sPropertyName As String, _
Optional ByVal sWbkName As String = "")
Const sPROCNAME As String = "Property_CustomDelete"
Dim ipropertycount As Integer
Dim sitemname As String
Dim oDocumentProperties As Office.DocumentProperties
On Error GoTo ErrorHandler
If (Len(sWbkName) = 0) Then sWbkName = ActiveWorkbook.Name
Set oDocumentProperties = Workbooks(sWbkName).CustomDocumentProperties
For ipropertycount = 1 To oDocumentProperties.Count
sitemname = oDocumentProperties.Item(ipropertycount).Name
If sitemname = sPropertyName Then
oDocumentProperties.Item(ipropertycount).Delete
Exit Sub
End If
Next ipropertycount
Exit Sub
ErrorHandler:
Call Error_Handle(msMODULENAME, sPROCNAME, Err.Number, Err.Description)
End Sub
Property_CustomExists
Public Function Property_CustomExists( _
ByVal sPropertyName As String, _
Optional ByVal bInformUser As Boolean = False, _
Optional ByVal sWbkName As String = "") _
As Boolean
Const sPROCNAME As String = "Property_CustomExists"
Dim ipropertycount As Integer
Dim oDocumentProperties As Office.DocumentProperties
On Error GoTo ErrorHandler
Call Tracer_AddSubroutineStart(msMODULENAME, sPROCNAME)
If (Len(sWbkName) = 0) Then sWbkName = ActiveWorkbook.Name
Set oDocumentProperties = Workbooks(sWbkName).CustomDocumentProperties
For ipropertycount = 1 To oDocumentProperties.Count
If oDocumentProperties.Item(ipropertycount).Name = sPropertyName Then
Property_CustomExists = True
Exit Function
End If
Next ipropertycount
If (bInformUser = True) Then
'Call modMessages.Message_PropertyCustomDoesNotExist(sPropertyName)
End If
Exit Function
ErrorHandler:
Call Error_Handle(msMODULENAME, sPROCNAME, Err.Number, Err.Description)
End Function
Property_CustomGet
Public Function Property_CustomGet( _
ByVal sPropertyName As String, _
Optional ByVal vDefaultValue As Variant = "") _
As Variant
Const sPROCNAME As String = "Property_CustomGet"
Dim oDocumentProperties As Office.DocumentProperties
On Error GoTo ErrorHandler
Set oDocumentProperties = ActiveWorkbook.CustomDocumentProperties
If Property_CustomExists(sPropertyName) = True Then
Property_CustomGet = oDocumentProperties.Item(sPropertyName).Value
Else
Property_CustomGet = vDefaultValue
End If
Exit Function
ErrorHandler:
Call Error_Handle(msMODULENAME, sPROCNAME, Err.Number, Err.Description)
End Function
Property_CustomSet
Public Function Property_CustomSet( _
ByVal sPropertyName As String, _
ByVal spropertyvalue As String, _
Optional ByVal sWbkName As String = "")
Const sPROCNAME As String = "Property_CustomSet"
Dim ipropertycount As Integer
Dim sitemname As String
Dim oDocumentProperties As Office.DocumentProperties
On Error GoTo ErrorHandler
If (Len(sWbkName) = 0) Then sWbkName = ActiveWorkbook.Name
Set oDocumentProperties = Workbooks(sWbkName).CustomDocumentProperties
For ipropertycount = 1 To oDocumentProperties.Count
sitemname = oDocumentProperties.Item(ipropertycount).Name
If sitemname = sPropertyName Then
oDocumentProperties.Item(ipropertycount).Value = spropertyvalue
Exit Function
End If
Next ipropertycount
Exit Function
ErrorHandler:
Call Error_Handle(msMODULENAME, sPROCNAME, Err.Number, Err.Description)
End Function
Wbk_Close
Public Sub Wbk_Close( _
ByVal iNoOfWbks As Integer, _
ByVal bSave As Boolean, _
Optional ByVal sWbkName As String = "")
Const sPROCNAME As String = "Wbk_Close"
Dim icount As Integer
On Error GoTo ErrorHandler
If sWbkName <> "" Then
Workbooks(sWbkName).Activate
End If
For icount = 1 To iNoOfWbks
If (Workbooks.Count > 0) Then
Application.StatusBar = "Closing the file : " & ActiveWorkbook.Name & " ..."
ActiveWorkbook.Close savechanges:=bSave
Else
GoTo ErrorHandler
End If
Next icount
Application.StatusBar = False
Exit Sub
ErrorHandler:
' Call Error_Handle(msMODULENAME, sPROCNAME, 1, "", "NO")
End Sub
Wbk_GetAllWsh
Public Function Wbk_GetAllWsh( _
Optional ByVal sWbkName As String = "") _
As String
Const sPROCNAME As String = "Wbk_GetAllWsh"
Dim sallwshs As String
Dim wshname As Worksheet
On Error GoTo AnError
sallwshs = ""
For Each wshname In ActiveWorkbook.Worksheets
sallwshs = sallwshs & ";" & wshname.Name
Next wshname
Wbk_GetAllWsh = Right(sallwshs, Len(sallwshs) - 1)
Exit Function
AnError:
' Call Error_Handle(msMODULENAME, sPROCNAME, 1, _
"")
End Function
Wbk_GetAllWshs
Public Function Wbk_GetAllWshs( _
ByVal sWbkName as String, _
ByVal sFolderPath As String) _
As String
Dim sallwshs As String
On Error GoTo ErrorHandler
If Wbk_Open(sFolderPath, _
sWbkName, 0, "", "", True) = True Then
sallwshs = Wbk_GetAllWsh
ActiveWorkbook.Close (False)
End If
GetAllWshs = sallwshs
Exit Function
ErrorHandler:
End Function
Wbk_GetFolderPath
Public Function GetWorkbookDirectory() _
As String
Dim sFolderPath As String
Dim sLatestDirectory As String
Dim sDay As String
Dim sMonth As String
Dim sYear As String
On Error GoTo ErrorHandler
sLatestDirectory = ""
sFolderPath = Dir(ThisWorkbook.Path & "\*", vbDirectory)
Do Until sFolderPath = ""
If (GetAttr(ThisWorkbook.Path & "\" & sFolderPath) And _
vbDirectory <> 0) And _
IsNumeric(sFolderPath) Then
If sFolderPath > sLatestDirectory Then
sLatestDirectory = sFolderPath
End If
End If
sFolderPath = Dir
Loop
GetWorkbookDirectory = ThisWorkbook.Path & "\" & sLatestDirectory & "\"
Exit Function
ErrorHandler:
End Function
Wbk_IsActive
Public Function Wbk_IsActive( _
Optional bInformUser As Boolean = False) _
As Boolean
Dim sWbkName As String
On Error GoTo ErrorHandler
sWbkName = Application.ActiveWorkbook.Name
Wbk_IsActive = True
Exit Function
ErrorHandler:
'Call modMessages.Message_NoWorkbooksOpen(bInformUser)
Wbk_IsActive = False
End Function
Wbk_IsOpen
Public Function Wbk_IsOpen( _
ByVal sFileName As String, _
Optional ByVal bInformUser As Boolean = False) _
As Boolean
Const sPROCNAME As String = "Wbk_IsOpen"
Dim iwkbcount As Integer
Dim sWkbName As String
On Error GoTo ErrorHandler
For iwkbcount = 1 To Workbooks.Count
If sFileName = Workbooks(iwkbcount).Name Then
Wbk_IsOpen = True
If bInformUser = True Then
Call MsgBox("The File : """ & sFileName & """ is already open")
End If
Else
Wbk_IsOpen = False
End If
Next iwkbcount
Exit Function
ErrorHandler:
' Call Error_Handle(msMODULENAME, sPROCNAME, 2, "", "NO")
End Function
Wbk_Open
Public Function Wbk_Open( _
ByVal sFolderPath As String, _
ByVal sFileName As String, _
Optional ByVal iUpdateLinks As Integer = 3, _
Optional ByVal sAdditional As String = "", _
Optional ByVal sExtension As String = ".xlsx", _
Optional ByVal bInformUser As Boolean = False) _
As Boolean
Const sPROCNAME As String = "Wbk_Open"
On Error GoTo ErrorHandler
Application.StatusBar = "Opening the file : " & _
sFolderPath & sFileName & sAdditional & sExtension & " ..."
Workbooks.Open(FileName:=sFolderPath & sFileName & sAdditional & sExtension, _
UpdateLinks:=iUpdateLinks).RunAutoMacros Which:=xlAutoOpen
Wbk_Open = True
Application.StatusBar = False
Exit Function
ErrorHandler:
If bInformUser = True Then _
Call MsgBox("Cannot Open file : " & vbCrLf & _
"""" & sFolderPath & sFileName & """")
Wbk_Open = False 'assigns false as open was unsuccessful
' Call Error_Handle(msMODULENAME, sPROCNAME, 2, "WB7", "NO")
End Function
Wbk_OpenAndCheck
Public Function Wbk_OpenAndCheck( _
ByVal sFolderPath As String, _
ByVal sWbkName As String, _
Optional ByVal sExtension As String = ".xls", _
Optional ByVal bInformUser As Boolean = False) _
As Boolean
Const sPROCNAME As String = "Wbk_OpenAndCheck"
Dim bcontinue As Boolean
On Error GoTo AnError
bcontinue = True
If sWbkName = "" Then bcontinue = False
sFolderPath = Folder_AddLine(sFolderPath) 'check there is a slash
sWbkName = File_AddExt(sWbkName, sExtension) 'check there is an extension
If bcontinue = True Then _
bcontinue = Folder_Exists(sFolderPath, bInformUser) 'check folder exists
If bcontinue = True Then _
bcontinue = File_Exists(sFolderPath, sWbkName, bInformUser) 'check file exists
If bcontinue = True Then _
bcontinue = Not Wbk_IsOpen(sWbkName, bInformUser) 'check file is not open
If bcontinue = True Then _
bcontinue = Wbk_Open(sFolderPath, sWbkName, 0, "", "", bInformUser)
Wbk_OpenAndCheck = bcontinue 'return whether successful or not
Exit Function
AnError:
' Call Error_Handle(msMODULENAME, sPROCNAME, 2, "", "NO")
End Function
Wbk_ReturnNewName
Public Function Wbk_ReturnNewName() _
As String
Const sPROCNAME As String = "Wbk_ReturnNewName"
Dim aWorkbookNames() As String 'declare the dynamic array
Dim icount As Integer
Dim iwbkcount As Integer
Dim bfound As Boolean
On Error GoTo ErrorHandler
ReDim aWorkbookNames(1) 'initialise the size to 0
icount = 0: bfound = False
For iwbkcount = 1 To Workbooks.Count
icount = icount + 1
ReDim Preserve aWorkbookNames(icount)
aWorkbookNames(icount) = Workbooks(iwbkcount).Name
Next iwbkcount
Workbooks.Add 'add a new workbook
For iwbkcount = 1 To Workbooks.Count
bfound = False
For icount = 1 To UBound(aWorkbookNames)
If aWorkbookNames(icount) = Workbooks(iwbkcount).Name Then
bfound = True
Exit For
End If
Next icount
If bfound = False Then 'the workbook was not in the array
Wbk_ReturnNewName = Workbooks(iwbkcount).Name
Exit For
End If
Next iwbkcount
Exit Function
ErrorHandler:
' Call Error_Handle(msMODULENAME, sPROCNAME, 2, "", "NO")
End Function
Wbk_WshsAllToString
Public Function Wbk_WshsAllToString( _
Optional ByVal sWbkName As String = "") As String
Const sPROCNAME As String = "Wbk_WshsAllToString"
Dim sallwshs As String
Dim wshname As Worksheet
On Error GoTo ErrorHandler
sallwshs = ""
For Each wshname In ActiveWorkbook.Worksheets
sallwshs = sallwshs & ";" & wshname.Name
Next wshname
Wbk_GetAllWsh = Right(sallwshs, Len(sallwshs) - 1)
Exit Function
ErrorHandler:
' Call Error_Handle(msMODULENAME, sPROCNAME, 1, _
"")
End Function
Wbk_WshsUnhideAll
Public Sub Wbk_WshsUnhideAll()
Dim ws As Excel.Worksheet
For Each ws In ActiveWorkbook.Sheets
ws.Visible = True
Next ws
End Sub
© 2026 Better Solutions Limited. All Rights Reserved. © 2026 Better Solutions Limited Top