Call

Custom Pre-Made VBA Functions


This section will allow you to speed up your VBA code by using pre-made functions to be inserted into a module within your VBA project.

Function WriteToFile(FileName As String, Data As String, Optional Path As String)
'Overview
'This module can be used to write data to a file. If you do not specify a path
'where the output file is to be located the path of the file which the module is
'contained will be used.
On Error Resume Next
Dim WB As Workbook
Set WB = ThisWorkbook
'If no path is specified we will assign one.
If IsMissing(Path) Then
Path = WB.Path
Path = Path & ""
End If
FileName = Path & FileName
Dim fnum As Integer
fnum = FreeFile ' Get the next free filenumber
Open FileName For Append As #fnum 'Open the file for Append
Print #fnum, Data & vbLf 'Write the data and add a linefeed.
Close #fnum
End Function

Function LoadFile(FileName As String, Wsheet As String)
'Overview: This module can be used to load a text file file into Excel and write the output to a worksheet
On Error Resume Next
Dim WB As Workbook
Set WB = ThisWorkbook
Dim WS As Worksheet
Set WS = WB.Worksheets(Wsheet)
Dim Data As String
Dim ProcessData() As String
Dim A As Long
Dim fnum As Integer
fnum = FreeFile
If fnum > 0 Then
Open FileName For Input As #fnum 'Open the file for Append
Data = Input$(LOF(1), 1)
ProcessData() = Split(Data, vbLf) 'Process the data into the array using the linefeed to seperate the lines
Close #fnum
End If
For A = 1 To 65000
WS.Cells(A, 1).Value = ProcessData(A - 1)
Next
End Function

Function PopulateWSArray(ByRef tmpArray() As String, Wsheet As String, StartRow As Long, StartColumn As Long, EndRow As Long, EndColumn As Long)
On Error Resume Next
'Overview: We can use this module to populate an array that emualtes a worksheet.
'It would allow us easy access to read and process data
Dim WSArray() As Variant 'The array to hold the data
Dim Row, Column As Long
Dim WB As Workbook
Dim WS As Worksheet
Dim A, B As Long 'The counters to use to populate the array
Set WB = ThisWorkbook
Set WS = WB.Worksheets(Wsheet)
Row = EndRow - StartRow
Column = EndColumn - StartColumn
ReDim WSArray(Row, Column)
For A = 1 To Row
For B = 1 To Column
WSArray(A, B) = WS.Cells(A, B)
Next
Next
End Function

Function DeleteRows(Column As Long, Wsheet As String)
On Error Resume Next
Dim WB As Workbook
Dim WS As Worksheet
Dim A As Long
Dim tmpValue As Variant
Set WB = ThisWorkbook
Set WS = WB.Worksheets(Wsheet)
For A = 1 To 1000
tmpValue = WS.Cells(A, Column).Value
If Len(Trim(tmpValue)) = 0 Then 'The cell does not contain any data
WS.Cells(A, Column).Activate
ActiveCell.EntireRow.Delete
If A > 1 Then
A = A - 1 'As we delete a row we need to reduce the counter
End If
End If
Next
End Function

Function TrimAllCells(Wsheet As String)
On Error Resume Next
'This module can be used to remove all leading and trailing spaces from cells ona worksheet
Dim A, B As Long
Dim tmpValue As Variant
Dim WB As Workbook
Dim WS As Worksheet
Set WB = ThisWorkbook
Set WS = WB.Worksheets(Wsheet)
For A = 1 To 10000 'Scroll through 10000 rows
For B = 1 To 256 'Scroll through columns
tmpValue = WS.Cells(A, B).Value
WS.Cells(A, B).Value = Trim(tmpValue)
Next
Next
End Function

Function ListSheets()
On Error Resume Next
'Overview: This module lists all the worksheets in a workbook
Dim WB As Workbook
Dim WS As Worksheet
Set WB = ThisWorkbook
For Each WS In WB.Worksheets
Debug.Print WS.Name 'This commands write the output to the debugging window (immediate)
Next
End Function

Function FindClearDuplicates(WKSheet As String, ColumnsToCheck() As Long, ClearDuplicates As Boolean, OutPutColumn As Long, Optional MatchValue = 90)
On Error Resume Next
'Overview: This module is used to identify duplicate records and associate the duplicate record with its original record
'The module can also find an exact duplicate or you can define the level of precision you want the match to be performed on
Dim WB As Workbook
Dim WS As Worksheet
Dim A, B, C, D, E, X As Long
Dim Counter As Long
Dim Length As Long
Dim Product, Max As Long
Dim inPos, TrueLength As Long
Set WB = ThisWorkbook
Dim tmpValue1, tmpValue2, tmpValue3, tmpValue4, tmpValueCombined, checkValue As Variant
Set WS = WB.Worksheets(WKSheet)
Dim RowOutput As Long
Dim tmpDupes() As Variant
For A = 1 To 10000
For B = 1 To UBound(ColumnsToCheck)
tmpValueCombined = tmpValueCombined & Trim(WS.Cells(A, ColumnsToCheck(B)))
Next
If Len(tmpValueCombined) > 0 Then
ReDim Preserve tmpDupes(A)
tmpDupes(A) = tmpValueCombined
tmpValueCombined = ""
Else
Exit For
End If
Next
Counter = 1
For A = 1 To UBound(tmpDupes)
If IsEmpty(WS.Cells(A, OutPutColumn).Value) Then
tmpValue1 = tmpDupes(A)
'Check if this was already
For B = (A + 1) To UBound(tmpDupes)
tmpValue2 = tmpDupes(B)
If ClearDuplicates = True Then 'check for clear duplicates
If tmpValue1 = tmpValue2 Then
If Len(WS.Cells(B, OutPutColumn).Value) > 0 Then
Else
WS.Cells(B, OutPutColumn).Value = Counter
End If
End If
Else
If A = 13 Then
Debug.Print "test"
End If
Length = Len(tmpValue1)
For D = 1 To Length
'Determine True length
TrueLength = Length - D + 1
For E = 1 To TrueLength
tmpValue3 = Mid(tmpValue1, D, E)
inPos = InStr(tmpValue2, tmpValue3)
If inPos > 0 Then
Product = E
If Product > Max Then
Max = Product
End If	
End If
Next
Next
If Max = Length Then
If Len(WS.Cells(B, OutPutColumn).Value) > 0 Then
Else
WS.Cells(B, OutPutColumn).Value = Counter
End If
ElseIf Max >= Length * MatchValue / 100 Then
If Len(WS.Cells(B, OutPutColumn).Value) > 0 Then
Else
WS.Cells(B, OutPutColumn).Value = Counter & "*" & " " & (Max / Length * 100) & "%"
End If
End If
Max = 0
End If
Next
WS.Cells(A, OutPutColumn).Value = Counter
Counter = Counter + 1
End If
Next
End Function

Function ListAppVersion()
On Error Resume Next
'Overview: You can use this module to determine the version of Excel you are running
If Application.Version = "8.0" Then'Excel 2003
Debug.Print 97
ElseIf Application.Version = "9.0" Then'Excel 2003
Debug.Print 2000
ElseIf Application.Version = "10.0" Then'Excel 2002
Debug.Print 2002
ElseIf Application.Version = "11.0" Then'Excel 2003
Debug.Print 2003
ElseIf Application.Version > "11.0" Then'Excel 2007 and up
Debug.Print 2007
End If
End Function

Function HideSheet(Wsheet As String)
On Error Resume Next
On Error GoTo ErrHandler:
'Overview: Hide a specific worksheet so that a normal user can't unhide it
Dim WB As Workbook
Set WB = ThisWorkbook
WB.Worksheets(Wsheet).Visible = xlSheetVeryHidden
End Function

Function EvaluateNumber(Data As String) As Long
On Error Resume Next
'Overview: This module receives a value and converts it to a number. If the value cannot be converted
'the module returns a 0
Dim tmpValue As Variant
tmpValue = CLng(Data)
If IsEmpty(tmpValue) Then
tmpValue = 0
End If
EvaluateNumber = tmpValue
End Function