VBA Snippets


App_Alerts

Switches the Display Alerts either On or Off.
Public Sub App_Alerts(ByVal bDisplayAlerts As Boolean)

On Error GoTo AnError
If bDisplayAlerts = True And Application.DisplayAlerts = False Then
Application.DisplayAlerts = True
ElseIf bDisplayAlerts = False And Application.DisplayAlerts = True Then
Application.DisplayAlerts = False
Else
End If

App_Alerts additonal textsttstsst


If gbDEBUG = False Then Exit Sub
AnError:
Call Error_Handle("App_Alerts", msMODULENAME, 1, _
"switch the display alerts to """ & bDisplayAlerts & """")
End Sub

App_Screen

Switches the ScreenUpdating either On or Off.
Public Sub App_Screen()

End Sub

Declarations_ModuleComments

The common declarations and important information to include at the top of every new VBA module.
Declarations_ModuleComments()
'Module Name:

'Module Description:


'ProjectName:
'Date Created:
'File Name:
'Directory:
'Author: Russell Proctor
'Version: 1.0
'Client:

'----------------------------------------------------------------------------------------
'Change History:

'----------------------------------------------------------------------------------------
'Comments:

'****************************************************************************************

Private Const msMODULENAME As String = "modCode"
Public gbEND As Boolean
Public Const gbDEBUG As Boolean = False
Public Const gbDEBUG_ERRMSG As Boolean = False
Public Const gsVERSION As String = "1.1R"
Public Const gsSOLUTION_NAME As String = "Workbook SaveAs"
Public Const gsFORM_TITLE As String = "BET: Workbook SaveAs"
Public Const gsFORM_PREFIX As String = "BET: Workbook SaveAs - "

Declarations_MsgBoxFrms

The common declarations to include when using dynamic message boxes.
Declarations_Frms

'Dynamic Message Boxes

'------------------------------------------- used for the dynamic changing userforms
Public Const lCOMMANDBUTTON_OKCOLOUR As Long = 8388608 'OK - button colour
Public Const lCOMMANDBUTTON_OKTEXTCOLOUR As Long = 16777215 'OK - text colour
Public Const lCOMMANDBUTTON_CANCELCOLOUR As Long = 16777215 'Cancel - button colour
Public Const lCOMMANDBUTTON_CANCELTEXTCOLOUR As Long = 8388608 'Cancel - text colour

Public Const iCOMMANDBUTTON_WIDTH As Integer = 66 'standard width of a command button
Public Const iCOMMANDBUTTON_HEIGHT As Integer = 24 'standard height of a command button
Public Const iCOMMANDBUTTON_TOP As Integer = 54 'standard height of a command button

Public Const iUSERFORM_FIRSTCONTROLTOP As Integer = 8

Public Const iUSERFORM_STANDHEIGHT As Integer = 102 'height of the messsage forms
Public Const iUSERFORM_STANDWIDTH As Integer = 220 'width of the message forms
Public Const iUSERFORM_TEXTHEIGHT As Integer = 10 'number of points = a line of text
Public Const iUSERFORM_TEXTLHSGAP As Integer = 42 'number of points on the LHS of text
Public Const iUSERFORM_TEXTRHSGAP As Integer = 28 'number of points on the RHS of text
Public Const iUSERFORM_TEXTBUTTONGAP As Integer = 10 'gap between the text box and cmb
Public Const iCHOICE_GAPBETWEENBUTTONS As Integer = 16 'gap between buttons on choice

Declarations_Solution

Option Explicit

'Module Description:
'Contains macros to

'Date Created: 01/08/2005
'File Name: Track Changes Consolidator
'Author: Better Solutions - Russell Proctor
'Version: 1_3
'Client: ClientName

'----------------------------------------------------------------------------------------
Private Const msMODULENAME As String = "modCode"
Public gbEND As Boolean
Public Const gbDEBUG As Boolean = False
Public Const gbDEBUG_ERRMSG As Boolean = False
Public Const gdtEXPIRES_DATE As Date = #4/30/2007#
Public Const gsVERSION As String = "1.21R"
Public Const gsSOLUTION_NAME As String = "Mail Merge Assistant"
Public Const gsFORM_TITLE As String = "BET: Mail Merge Assistant"
Public Const gsFORM_PREFIX As String = "BET: Mail Merge Assistant - "
Public Const gsTOOLBAR_NAME As String = "BET: Mail Merge Assistant"
Public Const gsBUTTON_TAG As String = "MailMergeAssistantButton1"
Public gfrmMERGEFIELDS As frmMergeFields
Public gfrmMERGEFIELDS_mbFormFieldsProtection As Boolean
Public gbCheck_MergePatientData As Boolean

General_clsProcessing

Used to create a progress dialog box.
Public Sub ProcessingUpdate()
Dim frmProcessingForm As frmProcessing
Set frmProcessingForm = New frmProcessing
Call frmProcessing.Display(Me) 'passes this class of clsProcessing
End Sub
'****************************************************************************************
Public Sub ProgressCallBack(frmProcessingForm As frmProcessing)

Application.StatusBar = "Please wait ..."
Call UpdateProcessBar(frmProcessingForm, "Connecting to database ...", 0.1)

' DO WHATEVER !!!

Call UpdateProcessBar(frmProcessingForm, "Disconnecting from database ...", 1.0)

Unload frmProcessingForm
Application.StatusBar = ""
If gbDEBUG = False Then Exit Sub
AnError:
End Sub

General_FindTarget

Returns ??.
Public Function General_FindTarget(dVariableNumber As Double, _
dCurrentNumber As Double, _
dTargetNumber As Double, _
dDeltaAmount As Double, _
dAccuracy As Double, _
sNumberCell As String, _
sTargetCell As String) As Double

Dim dNewCurrent_above As Double
Dim dNewCurrent_below As Double
Dim dVariableNumber_above As Double
Dim dVariableNumber_below As Double
On Error GoTo AnError

dVariableNumber_above = dVariableNumber + dDeltaAmount
Range(sNumberCell).Value = dVariableNumber_above
ActiveSheet.Calculate
dNewCurrent_above = Range(sTargetCell).Value

dVariableNumber_below = dVariableNumber - dDeltaAmount
Range(sNumberCell).Value = dVariableNumber_below
ActiveSheet.Calculate
dNewCurrent_below = Range(sTargetCell).Value


If Abs(dTargetNumber - dNewCurrent_above) < Abs(dTargetNumber - dNewCurrent_below) Then
' so we need to increase the variable value

If (Abs(((dTargetNumber - dCurrentNumber) / _
dCurrentNumber)) < dAccuracy) Then
FindTarget = dVariableNumber
ActiveSheet.Calculate
Else
dDeltaAmount = (Abs(dTargetNumber - dNewCurrent_above) / _
Abs(Abs(dCurrentNumber) - Abs(dNewCurrent_above))) * dDeltaAmount

FindTarget = FindTarget(dVariableNumber_above, dNewCurrent_above, _
dTargetNumber, dDeltaAmount, dAccuracy, sNumberCell, sTargetCell)
End If
Else
' so Abs(dTargetNumber - dNewCurrent_below) < Abs(dTargetNumber - dNewCurrent_above)
' then a number smaller than the current is nearer

If (Abs(((dTargetNumber - dCurrentNumber) / _
dCurrentNumber)) < dAccuracy) Then
FindTarget = dVariableNumber
ActiveSheet.Calculate
Else
dDeltaAmount = (Abs(dTargetNumber - dNewCurrent_below) / _
Abs(Abs(dCurrentNumber) - Abs(dNewCurrent_below))) * dDeltaAmount

FindTarget = FindTarget(dVariableNumber_below, dNewCurrent_below, _
dTargetNumber, dDeltaAmount, dAccuracy, sNumberCell, sTargetCell)
End If
End If
If gbDEBUG = False Then Exit Function
AnError:
FindTarget = 0
Call Error_Handle("General_FindTarget", msMODULENAME, 1, _
"??????? Check with print out ")
End Function

General_FolderAllFiles

Performs the wrapper to execute a common task on all files within a particular folder.
Public Function General_FolderAllFiles(ByVal sFolderPath As String, _
Optional ByVal sExtension As String = ".xls") As Boolean

Dim soriginalwbk As String
Dim snextfile As String
Dim lfilecount As Long
Dim bcontinue As Boolean

On Error GoTo ErrorHandler

bcontinue = True
lfilecount = 1
sFolderPath = Folder_LineAdd(sFolderPath)
If Folder_Exists(sFolderPath, True) = True Then
snextfile = File_AddExt(File_GetFirst(sFolderPath, sExtension), sExtension)
' Call Macro_SettingsEnable
Do While (bcontinue = True) And (snextfile <> "")
'--------------------------
lfilecount = lfilecount + 1
'--------------------------
snextfile = File_AddExt(File_GetNext(snextfile, sFolderPath), sExtension)
Loop
Else: bcontinue = False
End If
Call Macro_SettingsReset
General_FolderAllFiles = bcontinue

If gbDEBUG = False Then Exit Function
ErrorHandler:
Call Error_Handle("General_FolderAllFiles", msMODULENAME, 1, _
"perform the general operation on all the files" & _
" with extension """ & sExtension & """" & _
" in the folder " & vbcrlf & sFolderPath)
End Function

General_ForAllLinesInDocument

Performs a common teask on all the lines in a document.
Public Sub General_ForAllLinesInDocument()

Const sPROCNAME As String = General_ForAllLinesInDocument"
On Error GoTo AnError


If gbDEBUG = False Then Exit Sub
AnError:
' Call Error_Handle(msMODULENAME, sPROCNAME, 1,
Call MsgBox( _
"")
End Sub

General_ForAllTablesInDocument

Performs a common task on all the tables in a document.
Public Sub General_ForAllTablesInDocument()

Const sPROCNAME As String = "General_ForAllTablesInDocument"
On Error GoTo AnError


If gbDEBUG = False Then Exit Sub
AnError:
' Call Error_Handle(msMODULENAME, sPROCNAME, 1,
Call MsgBox( _
"")
End Sub

General_MultiplePSFiles

Combines multiple Postscript files into a single PDF file.
/PathName (T:/Bin/lynn/ps files 2/*.ps) def	  % Edit this to point to the folder
% containing the PS files.

/RunDir { % Uses PathName variable on the operand stack
{ /mysave save def % Performs a save before running the PS file
dup = flush % Shows name of PS file being run
RunFile % Calls built in Distiller procedure
clear cleardictstack % Cleans up after PS file
mysave restore % Restores save level
}
255 string
filenameforall
} def

PathName RunDir

Macro_Pause

Public Sub Macro_Pause( _
ByVal iPauseSeconds As Integer, _
Optional ByVal bUseStatusBar As Boolean = False, _
Optional ByVal bChangeCursor As Boolean = False)

Dim Start 'what is the type ??
On Error GoTo AnError

If bUseStatusBar = True Then
Application.StatusBar = "Macro has been paused for " & iPauseSeconds & " seconds ..."
End If
If bChangeCursor = True Then
Application.Cursor = xlWait
End If

Start = Timer 'retrieves the current time
Do While Timer < Start + iPauseSeconds
DoEvents 'does other things
Loop

Application.StatusBar = False
Application.Cursor = xlDefault

If gbDEBUG_ERRMSG = False Then Exit Sub
AnError:
Call Error_Handle("Macro_Pause", msMODULENAME, _
"pause the macro for " & iPauseSeconds & " seconds.")
End Sub

Macro_RunHasIt

Runs a given macro (with arguments) and return whether it was successful.
Public Function Macro_RunHasIt(sMacroName As String) As Boolean

On Error GoTo AnError
Application.Run sMacroName

???? Application.Run macro:= sMacroName
??? Also need to include a macro with parameters

Macro_RunHasIt = True
If gbDEBUG = False Then Exit Function
AnError:
Macro_RunHasIt = False
End Function

Macro_SettingsEnable

Enables all the standard application settings when running a macro.
Public Sub Macro_SettingsEnable()

On Error GoTo AnError
Application.StatusBar = False
' Application.Caption = Empty 'the name in the title bar
Application.ScreenUpdating = False
Application.DisplayAlerts = False
' Application.EnableCancelKey = xlInterrupt
' Application.EnableEvents = True
If gbDEBUG = False Then Exit Sub
AnError:
Call Error_Handle("Macro_SettingsEnable", msMODULENAME, 1, _
"enable the standard application settings for a macro")
End Sub

Macro_SettingsReset

Resets all the macro settings.
Public Sub Macro_SettingsReset()

Const sPROCNAME As String = "Macro_SettingsReset"

On Error GoTo AnError
Application.StatusBar = False
Application.Caption = ""
System.Cursor = wdCursorNormal
Application.ScreenUpdating = True
Application.DisplayAlerts = True

If gbDEBUG = False Then Exit Sub
AnError:
' Call Error_Handle(msMODULENAME, sPROCNAME, 1,
Call MsgBox( _
"")
End Sub

MacroButton_Add

Adds a macrobutton to the current location. A double click will take you to a specific bookmark.
Public Sub MacroButton_Add( _
ByVal sBookmarkName As Variant, _
ByVal sDisplayText As String, _
Optional ByVal bBold As Boolean = False, _
Optional ByVal bUnder As Boolean = False)

Const sPROCNAME As String = "MacroButton_Add"

On Error GoTo AnError
With Selection
.Fields.Add Selection.Range, wdFieldEmpty, _
"MACROBUTTON " & sBookmarkName & " " & sDisplayText, False
Call Field_Trim(sDisplayText, wdFieldMacroButton)
.MoveLeft wdCharacter, 1, wdExtend
.Font.ColorIndex = wdBlue
.Font.Bold = bBold
.Font.Underline = bUnder
End With

If gbDEBUG = False Then Exit Sub
AnError:
' Call Error_Handle(msMODULENAME, sPROCNAME, 1,
Call MsgBox( _
"add the macro button")
End Sub

Registry_Delete

Public Sub Registry_Delete( _
ByVal sAppName As String, _
ByVal sSection As String, _
Optional ByVal sKey As String = "")

On Error GoTo AnError
If Len(sKey) > 0 Then Call DeleteSetting(sAppName, sSection, sKey)
If Len(sKey) = 0 Then Call DeleteSetting(sAppName, sSection)

If gbDEBUG = False Then Exit Sub
AnError:
Call Error_Handle("Registry_Delete", msMODULENAME, 1, _
"delete the entry from the Registry for" & vbCrLf & _
"Application: " & sAppName & vbCrLf & _
"Section: " & sSection & vbCrLf & _
"Key: " & sKey)
End Sub

Registry_ListKeysToString

Public Function Registry_ListKeysToString( _
ByVal sAppName As String, _
ByVal sSection As String, _
ByVal sReturnValuePrefix As String, _
ByVal sConditionPrefix As String, _
ByVal sConditionValue As String) _
As String

On Error GoTo AnError
Dim ilisttotal As Integer
Dim ilistcount As Integer
Dim svaluesconcat As String
Dim sreturnvalue As String
Dim stestvalue As String

svaluesconcat = ""

Do While Len(CStr(Registry_Read(sAppName, sSection, _
sReturnValuePrefix & " " & ilisttotal + 1, ""))) > 0
ilisttotal = ilisttotal + 1
Loop

For ilistcount = 0 To (ilisttotal - 1)

sreturnvalue = CStr(Registry_Read(sAppName, sSection, _
sReturnValuePrefix & " " & ilistcount + 1))

stestvalue = CStr(Registry_Read(sAppName, sSection, _
sConditionPrefix & " " & ilistcount + 1))

If stestvalue = sConditionValue Then
svaluesconcat = svaluesconcat & sreturnvalue & ";"
End If

Next ilistcount

If Len(svaluesconcat) > 0 Then
svaluesconcat = Right(svaluesconcat, Len(svaluesconcat) - 1)
End If

Registry_ListKeysToString = svaluesconcat

If gbDEBUG = False Then Exit Function
AnError:
Call Error_Handle("Registry_ListKeysToString", msMODULENAME, 1, _
"")
End Function

Registry_Read

Returns the entry from the Registry given an application name, section and key.
Public Function Registry_Read(ByVal sAppName As String, _
ByVal sSection As String, _
ByVal sKey As String, _
Optional ByVal sDefault As String = "") _
As String

On Error GoTo AnError
Registry_Read = GetSetting(sAppName, sSection, sKey, sDefault)
If gbDEBUG_ERRMSG = False Then Exit Function
AnError:
Call Error_Handle("Registry_Read", msMODULENAME, _
"return the entry from the Registry for" & vbCrLf & _
"Application: " & sAppName & vbCrLf & _
"Section: " & sSection & vbCrLf & _
"Key: " & sKey)
End Function

Registry_Save

Public Function Registry_Save(ByVal sAppName As String, _
ByVal sSection As String, _
ByVal sKey As String, _
ByVal sValue As String)

On Error GoTo AnError
Call SaveSetting(sAppName, sSection, sKey, sValue)

Exit Function
AnError:
Call Error_Handle(msMODULENAME, "Registry_Save", Err, _
"save this entry to the Registry for" & vbCrLf & _
"Application: " & sAppName & vbCrLf & _
"Section: " & sSection & vbCrLf & _
"Key: " & sKey & vbCrLf & _
"Value: " & sValue)
End Function

Registry_SectionExists

Public Function Registry_SectionExists(sAppName As String, _
sSection As String) As Boolean

Dim sreturn As String
On Error GoTo AnError

'NOT POSSIBLE !!!!

Registry_SectionExists = False
'Setting(sAppName, sSection)
If sreturn <> "nothing" Then Registry_SectionExists = True

If gbDEBUG = False Then Exit Function
AnError:
Call Error_Handle("Registry_Delete", msMODULENAME, 1, _
"determine if the followng entry exists in the Registry:" & vbCrLf & _
"Application: " & sAppName & vbCrLf & _
"Section: " & sSection & vbCrLf & _
"Key: " & sKey)
End Function

© 2024 Better Solutions Limited. All Rights Reserved. © 2024 Better Solutions Limited Top