There are a couple of very good ansewers on the mechanics of using smple classes in VBA: When to use a Class in VBA? and What are the benefits of using Classes in VBA?
As someone relativley new to OOP and classes, it's hard to know how to implement them, or what is even really possible.
For example, I have to deal with large ranges in multiple sheets and I need to get at many different subsets of the data. "agents who does x" and "clients who have y"...etc. Here's a sub i put together to get at the number of agents who have more than 2 clients:
Sub agent_subset(output_sheet As String, _
Input_sheet_name As String, _
email_col As Integer, _
vendor_count_col As Integer, _
client_count_col As Integer, _
modified_col As Integer, _
num_of_clients As Integer)
' get a list of all agents with 2 or more clients and put them into a sheet
Application.DisplayStatusBar = True
Dim sheet_rows As Long
sheet_rows = Worksheets(Input_sheet_name).Cells(rows.Count, 1).End(xlUp).Row
Dim email_range As Range ' range of agent emails
Dim client_count_range As Range ' range of client count
Dim vendor_count_range As Range ' range of vendor count
Dim modified_range As Range ' range of modified at
With Worksheets(Input_sheet_name)
Set email_range = .Range(.Cells(2, email_col), .Cells(sheet_rows, email_col))
Set client_count_range = .Range(.Cells(2, client_count_col), .Cells(sheet_rows, client_count_col))
Set vendor_count_range = .Range(.Cells(2, vendor_count_col), .Cells(sheet_rows, vendor_count_col))
Set modified_range = .Range(.Cells(2, modified_col), .Cells(sheet_rows, modified_col))
End With
Dim n As Long
Dim counter As Long
counter = 0
Dim modified_array() As String
For n = 2 To sheet_rows
If client_count_range(n, 1).Value > num_of_clients Then
counter = counter + 1
Worksheets(output_sheet).Cells(counter + 1, 1).Value = email_range(n, 1).Value
Worksheets(output_sheet).Cells(counter + 1, 2).Value = client_count_range(n, 1).Value
Worksheets(output_sheet).Cells(counter + 1, 3).Value = vendor_count_range(n, 1).Value
modified_array() = Split(modified_range(n, 1).Value, "T")
Worksheets(output_sheet).Cells(counter + 1, 4).Value = modified_array(0)
End If
Application.StatusBar = "Loop status: " & n & "of " & sheet_rows
Next n
Worksheets(output_sheet).Cells(counter + 3, 1).Value = "Last run was " & Now()
Application.StatusBar = False
End Sub
It works great, but now I want to get a an even smaller subset of agents and clients based on other criteria. So, I'm going to write a similar function, manipulating similar data. My gut tells me using classes will make my life easier, but I don't know how to chop up the tasks.
Should there be an Agent class that has all the info about agents? and/or a client class? Or, should the classes be for looking at entire ranges or sheets?
I'm not looking for specific code, but a methodology on how to break things down.