Allen Browne Functions Index
Month: April 2016
What’s the difference between Sub Routines and Functions
I was curious Sub Routines and Functions appear to perform almost the same thing what is the difference and what are their relative advantages?
Functions return a value that is stored whereas subs don’t. The main difference is not only the return value, it seems that subs are faster than functions (at least in .net) because the MSIL code of subs is much shorter when no value is returned. so overall subs are faster when no value is returned.
MSIL stands for Microsoft Intermediate Language – which is the a programming language that has been standardized later as the Common Intermediate Language
Typical While Loop VBA
Function TypicalWhileLoop()
'This performs the same as next loop but uses the while loop
Dim LCounter As Integer
LCounter = 1
While LCounter < 10
MsgBox (LCounter)
LCounter = LCounter + 1
Wend
End Function
Typical For Next Loop
Function TypicalForNextExample()
'This performs the same as the while loop but uses for next
Dim i As Integer
For i = 1 To 9
MsgBox (i)
Next i
End Function
Typical DAO.Recordset VBA for looping through and altering
Function TypicalDAOrecordset()
'Make sure the name of the recordset is unambiguous
'Good practice to reference the actual library
Dim rs As DAO.Recordset
Dim db As DAO.Database
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM T001Main where T001Main.ValueNumber = 0")
'the data source can be a Table Name a query name or an sql string
'it would be possible to change the SQL to set to another set of records
'Check to see if there are any records in the set
If Not (rs.EOF And rs.BOF) Then
'there are no records if End of File and beginning of file are both true
rs.MoveFirst
Do Until rs.EOF = True
rs.Edit
rs!ValueNumber = 300
rs.Update
rs.MoveNext
Loop
Else
MsgBox "No Records available for updating exit sub"
Exit Function
End If
MsgBox "Looped through the records and updated ValueNumber field"
rs.Close
Set rs = Nothing
Set db = Nothing
'libraries for DAO can be found on AllenBrowne site
'remember to break an infinite loop press ctrl + break
End Function
VBS – Pieces of code
Shutdown computer
Option Explicit
Dim oShell
Set oShell = Wscript.CreateObject("Wscript.Shell")
oShell.Run "SHUTDOWN -T 60 -S" 'wait 60 seconds before shutting down
Trigger speech
Option Explicit
Dim speechobject
set speechobject=createobject("sapi.spvoice")
speechobject.speak "Your system is setup and ready for your day"
Delay for Seconds (10)
Option Explicit
Dim dteWait
dteWait = DateAdd("s", 10, Now())
Do Until (Now() > dteWait)
Loop
Sleep Function for Delay – Count in Milliseconds (5 mins below)
WScript.Sleep 5*60*1000
MS Access VBA Function – Count Numbers of Records in Tables and list.
Not quite finished yet but place here for later correction.
Public Function CountAllTablesRows()
Dim rs As New ADODB.Recordset
Dim rsRC As New ADODB.Recordset
Dim strTbName As String
Dim lngRowCount As Long
Dim tbl As TableDef
CurrentProject.Connection.Execute "Delete from TABLE_INFO"
rs.Open "TABLE_INFO", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
For Each tbl In CurrentDb.TableDefs
Select Case Left(tbl.Name, 4)
Case "mSys"
Case Else
rs.AddNew
rsRC.Open "Select count(*) as The_Count from [" & tbl.Name & "]", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly
rs.Fields("TBL_NAME") = tbl.Name
rs.Fields("TBL_ROWCOUNT") = rsRC.Fields("The_Count")
rs.Update
rsRC.Close
Set rsRC = Nothing
'Debug.Print tbl.Name
End Select
Next
rs.Close
Set rs = Nothing
MsgBox "Counted Numbers in Table"
End Function