Paul Kelly VBA Handbook Flashcards

1
Q

Cycle through a range of data row by row having already set up the range of data

A

Dim DataCurRow As Range

For Each DataCurRow In rgData.Rows

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

get a filename/address when the workbook name is already set up as sWorkbook

A

’ Get the filename
Dim sFilename As String
sFilename = ThisWorkbook.Path & “" & sWorkbook

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Check if the file exists in directory

A

If Dir(sFilename) = “” Then
MsgBox “Could not find the workbook: [” & sFilename _
& “]. Please check this file is in the current folder.”
Exit Sub
End If

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Check to see if 2 items have the same text

A

If StrComp(sUserTeam, sTeam1, vbTextCompare) = 0, then….

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Create a dictionary for 2 football teams with a number field. Print one teams score. Test if the other team exists in the dictionary.

A
Sub DictExample()
    Dim dict As New Scripting.Dictionary
'populate the dictionary

dict. Add "Germany", 6
dict. Add "Uruguay", 12

' print the value of france, ie 8
Debug.Print dict("France")
    ' checks if an entry for Germany
        If dict.Exists("Germany") Then
            ' set the value of Germany to 89
            dict("Germany") = 89
            Debug.Print dict("Germany")
        End If
End Sub
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Create a function to format a date with date stated in the function

A
Function CustomDate() As String
    CustomDate = Format(Date, "dddd dd mmmm yyyy")

End Function

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Create a function to format a date with the date passed from a sub referencing the custom function

A
Function CustomDate(DateToFormat As Date) As String
    CustomDate = Format(DateToFormat, "dddd dd mmmm yyyy")

End Function

’ call the function

Sub CreateNewSheet()

Worksheets.Add
Range("a1").Value = "Created on " & CustomDate(#1/1/2019#) End Sub
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Distinguish between a parameter and an argument

A

A parameter is the variable in the sub/function declaration.

An argument is the value that you pass to the parameter.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Add a new record to dictionary “dict” with object oTeamCalc and of class module clsTeamCalc and a key of Team1

A

’ oTeamCalcs is a New object design of clsTeamCalcs

Set oTeamCalcs = New clsTeamCalcs

’ adding a new item with a key being the value of variable sTeam2
dict.Add sTeam2, oTeamCalcs

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Test whether Team1 exists in dictionary “dict”

A

If Not dict.Exists(sTeam2) Then

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

What is code to cycle through dictionary “dict”

A

’ go through each team in the dictionary
Dim k as variant
For Each k in dict.Keys

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

How do we add goals_for to a dictionary “dict” to variable sTeam1, where goals_for is defined in a class module and goal1 is the variable for the current match

A

dict(sTeam1).goals_for = dict(sTeam1).goals_for + goal1

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

When in CreateReports where the flow of subs is controlled how do we control a dictionary “dict”?

A
' Read Data into dictionary
    ' create a scripting dictionary
    Dim dict As Scripting.Dictionary
    ' get the value from ReadFromdata sub
    Set dict = ReadFromdata()
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

’ Create new dictionary

A

’ Create new dictionary

Dim dict As New Scripting.Dictionary

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

’ get the user settings

A

Dim sYear As String, sWorkbook As String
sYear = cnReport.Range(CELL_USER_YEAR)
sWorkbook = cnReport.Range(CELL_USER_WORKBOOK)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

’ Open Workbook, dim wkBook as Workbook and refer to sWorkbook

A

’ Open Workbook
Dim wkBook As Workbook
Set wkBook = Workbooks.Open(ThisWorkbook.Path & “" & sWorkbook, ReadOnly:=True)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

’ Get the data range, referring to a constant

A

’ Get the data range
Dim rgData As Range
Set rgData = shData.Range(DATA_RANGE_START).CurrentRegion
Set rgData = rgData.Offset(1, 0).Resize(rgData.Rows.Count - 1)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

’ go through each row

A

’ go through each row
Dim rgCurRow As Long
For Each rgCurRow In rgData.Rows
Next rgCurRow

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

What is a class module?

A

A way of storing a record for each team

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

’ go through each row,
read the data into variables
check if teams exist, if not add

A

’ go through each row
Dim rgCurrRow As Range
For Each rgCurrRow In rgData.Rows
‘read the row data into variables
sTeam1 = rgCurrRow.Cells(1, COL_DATA_TEAM1)
goal1 = rgCurrRow.Cells(1, COL_DATA_SCORE1)
sTeam2 = rgCurrRow.Cells(1, COL_DATA_TEAM2)
goal2 = rgCurrRow.Cells(1, COL_DATA_SCORE2)

 ' Check if team 1 exists and if NOT then create a new oTeamCalcs
    If Not dict.Exists(sTeam1) Then
        Set oTeamCalcs = New clsTeamCalcs
        ' sTeam1 is the key, oTeamCalcs is the new container and
        ' clsTeamCalcs the type of container
        dict.Add sTeam1, oTeamCalcs
    End If

    ' Check if team 2 exists and if NOT then create a new oTeamCalcs
    If Not dict.Exists(sTeam2) Then
        Set oTeamCalcs = New clsTeamCalcs
        ' sTeam2 is the key, oTeamCalcs is the new container and
        ' clsTeamCalcs the type of container
        dict.Add sTeam1, oTeamCalcs

    End If

Next rgCurrRow
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Dim sht as worksheet and loop though all worksheets in the current workbook and write “Hello World” in cell A1

A

Public Sub LoopForEach()

' Writes "Hello World" into cell A1 for each worksheet
Dim sht As Worksheet
For Each sht In ThisWorkbook.Worksheets
     sht.Range("A1") = "Hello World"
Next sht 

End Sub

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

’ Passing a range string/range Address into the sub “PrintName” from sub DoStuff

A
Sub DoStuff()
' Passing a range string/rangeAddress into the sub "PrintName" as it is called
    PrintName cnReport.Range("A1")
    PrintName cnReport.Range("b1")
    PrintName cnReport.Range("c1")
End Sub
Sub PrintName(rg As Range)
' here we are receiving an argument of cnReport.Range("A1") into the
' parameter rg.
    Debug.Print rg
End Sub
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

’ SUB TO PASS FIRST NAME AND SECOND NAME ARGUMENTS INTO ANOTHER SUB. FIRST SUB NAME “PrintNames”, 2nd SUB “name”

A
' this sub is passing the values into the second sub
Public Sub PrintNames()
NameFormat "John", "Smith"
NameFormat "mary", "jones"
End Sub
Public Sub NameFormat(firstname As String, secondname As String)
    Dim name As String
    name = secondname + ", " + firstname
        Debug.Print name
End Sub
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

What is the default way of passing arguments into subs and functions?

A

ByRef

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

What is difference between ByRef and ByVal? Which one should we always use?

A

ByRef changes the value of the sub/function. ByVal defaults back to the value stated in the calling function.
ByVal.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Pass 20 from sub one to variable “val” in sub 2, using ByVal and Optional. Print val

A

Public Sub usingOptional()
printStudentNo 20
End Sub
‘ variable val is receiving a value of 20 passed from usingOptional
Sub printStudentNo(Optional ByVal val As Long)
Debug.Print val
End Sub

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

For Optional Arguments, what should you do

A

It is good practice to state a value eg (Optional ByVal val as Long = 20).

If you supply a parameter in the calling code it uses the parameter, otherwise it uses the default.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

What is important about “:=” in parameters

A

It enables you to specify an optional parameter without using commas which is much easier where there are multiple parameters

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Loop through data to find “Laptop Model A” in column1 and output ot shReport A1 down

A

Sub UseForCopyOR()

' Get the source data range
Dim rg As Range
Set rg = shData.Range("A1").CurrentRegion

Dim i As Long, row As Long, rgDest As Range
row = 1
' Read through the data one row at a time
For i = 1 To rg.Rows.Count

    ' Check if the current row has an item of type "Laptop Model A"
     OR it is the header i.e. i=1
    If (rg.Cells(i, 1).Value2 = "Laptop Model A" _
        Or i = 1 Then

        ' Get the destination range
        Set rgDest = shReport.Range("A" & row).Resize(1, rg.Columns.Count)

        ' Copy the data using the assignment operator(equals sign)
        rgDest.Value2 = rg.Rows(i).Value2

        row = row + 1
    End If
Next i

shReport.Activate

End Sub

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

What is the standard code for AutoFilter to filter for “Laptop Model A” and past to shReport.Range(“A1”)

A

’ Clear any existing Autofilter
rg.AutoFilter

' Apply the filter
rg.AutoFilter 1, "Laptop Model A"

' Copy the data
rg.SpecialCells(xlCellTypeVisible).Copy
shReport.Range("A1").PasteSpecial xlPasteValues

' Clear our Autofilter
rg.AutoFilter
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

set up an advanced filter with rg the range to filter already given with output titles “Stockist..” and “Year”. All in sheet shSales

A
' specify the output headers
'    With shSales
'        .Range("j6") = "Stockist/Customer"
'        .Range("k6") = "Year"
'
'    End With
 ' Set up advanced filter criteria
    Dim CriteriaRange As Range
    Set CriteriaRange = shSales.Range("l3:m4")
' set up advanced filter destination
Dim CopyRange As Range
Set CopyRange = shSales.Range("j6:s6")

' run advanced filter
rg.AdvancedFilter xlFilterCopy, CriteriaRange, CopyRange
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

Copy a cell’s formula to the next row down

A

rgSrc.Copy

rgSrc.Offset(1, 0).PasteSpecial xlPasteFormulas

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

How to stop the marching ants

A

’ stops “marching ants”

Application.CutCopyMode = False

34
Q

Scroll to the bottom of a range once the macro complete (and then up one row)

A

’ scrolls to where we need to be

ActiveWindow.ScrollRow = Selection.Row - 1

35
Q

How do you count blank cells (where a formula returns nothing)?

A

WorksheetFunction.CountBlank

36
Q

when specifying a range, how to you specify a non contiguous range?

A

, eg. cnSheet.Range(“a1:a2,c7,d9:e9”)

37
Q

Create a macro to select a cell A9 using rgRow as a variable

A

Dim row as long
rgRow = 9
cnSheet.range(“A” & rgRow) = “Test”

38
Q

for a sub, which is default, private or public?

A

public

39
Q

What is Definition and how to you find.

A

Definition defines the variable. Right click mouse or Shift+F2

40
Q

VBA to get back to last position

A

Ctrl + Shift + F2

41
Q

What does debug compile do?

A

Checks code for project errors over more than one line

42
Q

Add a new workbook wkNewReport

A

’ Declare a varable for a new workbook
Dim wkNewReport As Workbook

' Add a new workbook
Set wkNewReport = Workbooks.Add
43
Q

Add a new worksheet shTemplate to workbook wkNewReport

A

’ Create a new template after the default Sheet1

shTemplate.Copy after:=wkNewReport.Worksheets(1)

44
Q

Delete the first worksheet in a workbook

A

’ Delete Sheet1 as it is not needed
Application.DisplayAlerts = False
wkNewReport.Worksheets(1).Delete
Application.DisplayAlerts = True

45
Q

Call a function CreateWorkbook and pass values into that function which is CrateWorkbook(ByVal bBuildFormat as Boolean, ByRef shTemplate as Worksheet) As Workbook

A

CreateWorkbook(True, cnTemplateFormatted)

46
Q

How do you set a workbook wkNewReport and add a workbook with a worksheet

A

setwkNewReport = workbooks.Add

shTemplate.copy after:=wkNewReport.Worksheets(1)

47
Q

RA code to do something if intersect has a value and record key has a value. The something is set the defined cell to the row.

A

If Not Intersect(Target,Range(“D13:J9999)) is nothing and Range (“D” & Target.Row).Value <> Empty Then
Range(“B2”).Value = Target.Row

End if

48
Q

Load Contact

A

Sub Cont_Load
With Sheet1
If .Range(“B2”).value = Empty Then Exit Sub
.Range(“B4”).value = True ‘ set contact load to true
ContRow = .Range(“B2”).Value ‘Returns the Contact
‘Row number
For ContCol = 4 to 10
.Range(.Cells(11,ContCol).Value).value =
Cells(ContRow,ContCol).value
Next ContCol
.Range(“B4).value = False ‘ set contact load to false
End With

49
Q

sub for IFERROR to wrap it around all existing sheet formula where IFERROR has yet to be added

A

Sub vbaPracIfError()

’ wrap around IFERROR to all existing formula
Dim cell As Range
Dim formulaRange As Range

Set formulaRange = cells.specialCells(xlCellTypeFormulas)
Debug.Print formulaRange.Address

For Each cell In formulaRange
    'check to see "IFERROR ALREADY ADDED
    If InStr(cell.Formula, "IFERROR") = 0 Then
    'if not then add "IFERROR"
        cell.Formula = "=iferror(" &amp; VBA.Mid(cell.Formula, 2) &amp; ","""")"

    End If
Next cell

End Sub

50
Q

What is the difference between
Range(“B6”).interior.colorindex
Range(“B6”).interior.color?

A

Colorindex returns a very limited number of standard colors. Color is very broad.

51
Q

How do you execute a command to the immediate window and how do you execute the same command in Excel?

A
  1. Immediate window, use a ? at start

2. no ? at start

52
Q

Find the last column with data (starting with the last column) assigning to x

A

x.value = cells(5, Columns.Count).End(xlToLeft).Column

53
Q

Find the last row with data (starting with last row).assigning to x

A

x.value = Range(“A” & Rows.Count).End(xlUp).Row

54
Q

Find the last row with data (starting in the data).assigning to x

A

x.value = Range(“A4”).End(xlDown).row

55
Q

Assign the address of the current region to x

A

x.value = Range(“A5”).CurrentRegion.Address

56
Q

Assign the address of the last used cell in worksheet to x

A

x.Value = cells.specialCells(xlCellTypeLastCell).Address

57
Q

Assign to x the number of used rows.

A

x.Value = ActiveSheet.UsedRange.Rows.Count

58
Q

Change the color of Row 8 to colorindex 6

A

Range(“a8”).EntireRow.Interior.ColorIndex = 6

59
Q

Select a color constant to change the color of an entire row

A

Range(“a8”).EntireRow.Interior.color = VBA.ColorConstants.vbMagenta

60
Q

remove any color from a range beginning at A5

A

Range(“A5 : A” & Cells(Rows.Count, 1).End(xlUp).Row).EntireRow.Interior.Color = Excel.Constants.xlNone

61
Q

How do we get around the fact that activeSheet does not have intellisense?

A

set a variable for wht worksheet
Dim Sh As Worksheet
Set Sh = ActiveSheet

62
Q

when might we refer to Worksheets(1) and why not normally?

A

When you have a worksheet.

Normally avoid because worksheet (1) will move around if worksheet order is changed.

63
Q

In vba, what is the difference between using “?” and “*”

A

? is a wildcard for a 1 character string

* is a wildcard for an any length character string

64
Q

What function do you use to check if a file exists.

How do you use this function?

A

DIR function uses a path argument and returns the name of the file or folder. If path name is not found, DIR returns a zero length string “”.
Dim filename as string
filename = VBA.Dir(“C:\Users\Andrew\Downloads\S*”)
If filename = vba.constants.vbNullString then
msgbox “file not existing”
Else
msgbox “exists”
End if

65
Q

Open a file, copy some data and close the file.

A

Sub get_data_From_File()

' looks for a file in the location of "this" file
Dim OpenBook As Workbook
Dim fileToopen As Variant

' opens file dialogue box
fileToopen = Application.GetOpenFilename(Title:="Browse for your file to open", filefilter:="Excel Files (*.xls*),*xls*")

    If fileToopen <> False Then  ' fileToOpen either has a name of it is False (ie. when cancelled)
        ' open a file
        Set OpenBook = Application.Workbooks.Open(fileToopen)
            ' copy some data
            OpenBook.Sheets(1).Range("A20").CurrentRegion.Copy
            ThisWorkbook.Worksheets("SelectFile").Range("A10").PasteSpecial xlPasteValues
        ' close the file
        OpenBook.Close False
     End If

End Sub

66
Q

Read a filename into a variable using Dir. What happens if filename does not exist

A

Dim fileName As String

fileName = VBA.FileSystem.Dir(“C:\Users\Andrew\Dropbox\vba\text file reader\filereader.xlsm”)

67
Q

’ Check if the variable Filename contains a filename

A
If fileName = VBA.Constants.vbNullString Then
        MsgBox "file not exist"
    Else
        MsgBox "file exists"
    End If
68
Q

check the filepath exists

if not then create a filepath

A

Sub checkFilePath()
Dim path As String
Dim filename As String
Dim answer As VbMsgBoxResult

path = "C:\Users\Andrew\Dropbox\vba\text file reader\x2"
filename = VBA.Dir(path, vbDirectory)
If filename = VBA.Constants.vbNullString Then
    answer = MsgBox("do you wish to create a directory", vbYesNo)
        Select Case answer
            Case vbYes
                VBA.FileSystem.MkDir (path)
            Case vbNo
                Exit Sub
        End Select
    Else
        MsgBox "folder exists"
    End If

End Sub

69
Q

copy data into a new file and save as a csv

A

Sub Save_as_CSV()
Dim newBook As Workbook
Dim FileName As String
Application.DisplayAlerts = False

FileName = Application.ThisWorkbook.Path &amp; "\TestTextCSV.csv"
Set newBook = Workbooks.Add
shCsv.Copy before:=newBook.Sheets(1)
    With newBook
        .Sheets(1).Rows("1:2").Delete
        .SaveAs FileName:=FileName, FileFormat:=Excel.xlCSV
        .Close
    End With
Application.DisplayAlerts = False
MsgBox "Your csv file was exported to the same director as this workbook" End Sub
70
Q

’ Writing to text file in correct structure
‘ go through each row
‘ then each cell in row
‘ get structure correct first

A

Sub exportToFilex()

' Writing to text file in correct structure
' go through each row
' then each cell in row
' get structure correct first
    Dim fileName As String
    Dim ExpRange As Range
    Dim ExpRow As Range
    Dim ExpCell As Range
    Dim myValue As Variant
    Dim dLimitR As Variant
    dLimitR = "&amp;"
fileName = ThisWorkbook.Path &amp; "\ProjectActivity.csv"
Open fileName For Output As #1

Set ExpRange = shCsv.Range("A6").CurrentRegion.Rows

For Each ExpRow In ExpRange
    'Debug.Print ExpRange.Address
    For Each ExpCell In ExpRow.Cells

        myValue = myValue &amp; ExpCell.Value &amp; dLimitR
    Next ExpCell
        myValue = Left(myValue, Len(myValue) - 1)
        Print #1, myValue
        myValue = ""
Next ExpRow

Close #1

End Sub

71
Q

‘Create a table named tbl in the active sheet

A

‘Create a table named tbl in the active sheet
Sub convertToTable()
Dim tbl As Range
Dim ws As Worksheet

Set tbl = Range(“A1”).CurrentRegion
Set ws = ActiveSheet

ws.ListObjects.Add(SourceType:=xlSrcRange, Source:=tbl).Name = “Data”

End Sub

72
Q

add a column to a table tbl in worksheet ws

A

Sub addColumnTotable()

Dim ws As Worksheet
Dim tbl As ListObject

Set ws = ActiveSheet
Set tbl = ws.ListObjects(“Data”)
tbl.ListColumns.Add(4).Name = “xyz£”

End Sub

73
Q

Filter the 7th column of a table for >=15 and <=30

A

Sub addfilter()

Dim ws As Worksheet
Dim tbl As ListObject

Set ws = ActiveSheet
Set tbl = ws.ListObjects(“Data”)

tbl.Range.AutoFilter field:=7, Criteria1:=”>=15”, Operator:=xlAnd, Criteria2:=”<=30”

End Sub

74
Q

remove duplicates from column1

A

Sub removeDuplicates()

Dim rg As Range

Set rg = Range("A1").CurrentRegion

rg.removeDuplicates Columns:=1, Header:=xlYes

End Sub

75
Q

’ delete a databody range and then add a row

A

’ delete a databody range and then add a row
Sub tablesXXY()
Dim table As ListObject
Set table = Sheet1.ListObjects(“data”)
If Not table.DataBodyRange Is Nothing Then
table.DataBodyRange.Delete
table.ListRows.Add
End If
End Sub

76
Q

show/hide table headers for table named “Data”

A

Sub showHeaderRow()
Dim table As ListObject
Set table = ActiveSheet.ListObjects(“Data”)
table.ShowHeaders = Not table.ShowHeaders ‘DEALING HEADERS USING BOOLEAN
If table.ShowHeaders = True Then
table.ShowAutoFilterDropDown = Not table.ShowAutoFilterDropDown
End If
End Sub

77
Q

show/ hide table totalrow

A
Sub SHOWTOTALROW()
    Dim table As ListObject
    Set table = Sheet1.ListObjects("Data")
    table.ShowTotals = Not table.ShowTotals

End Sub

78
Q

toggle autofilter on/off in a table

A

Sub TurnoffAutoFilter()
‘DOES NOT WORK PRIOR TO EXCEL 2013
Dim table As ListObject
Set table = Sheet1.ListObjects(“Data”)
table.ShowAutoFilterDropDown = Not table.ShowAutoFilterDropDown
table.ShowTableStyleFirstColumn = Not table.ShowTableStyleFirstColumn
End Sub

79
Q

‘Create a table named tbl in the active sheet

A

‘Create a table named tbl in the active sheet
Sub convertToTable()
Dim tbl As Range
Dim ws As Worksheet

Set tbl = Range(“A1”).CurrentRegion
Set ws = ActiveSheet

ws.ListObjects.Add(SourceType:=xlSrcRange, Source:=tbl).Name = “Data”

End Sub

80
Q

Sub addColumnTotable()

A

Sub addColumnTotable()

Dim ws As Worksheet
Dim tbl As ListObject

Set ws = ActiveSheet
Set tbl = ws.ListObjects(“Data”)
tbl.ListColumns.Add(4).Name = “xyz£”

End Sub