In VBA, there are two main types of code modules – standard modules and class modules. While both allow writing macros and procedures to automate Excel, there are some key differences between them.
Standard modules, sometimes referred to as regular modules, are the default module type in VBA. They use a declarative programming style where all procedures and variables declared in a standard module are available to the entire project. Code written in standard modules can directly manipulate objects, write to cells, run macros, etc. Code written in standard modules does not support object-oriented programming features like encapsulation and inheritance that are supported by class modules.
Class modules allow writing code using object-oriented programming principles in VBA. A class module defines a data type template for an object and is used to instantiate objects of that class. Class modules contain procedure codes just like standard modules, but the procedures and variables declared inside a class are private to that class by default and cannot be accessed directly from outside the class. To access the members of a class, you need to create an instance of that class first. For example, to access the properties and methods of a class called Employee, you would need to instantiate it as Set Emp = New Employee.
Some key differences between standard modules and class modules in VBA:
Standard modules use declarative programming style while class modules use object-oriented programming principles like encapsulation and inheritance.
Variables and procedure declared in a standard module are public and can be accessed from anywhere in the VBA project directly. Variables and procedures declared in a class module are private to that class by default and require object instantiation to access.
Standard modules do not support object-oriented features like inheritance and polymorphism. But classes can inherit from other classes and procedures can be overridden to support polymorphism.
Standard modules are used primarily for procedural macros and utility functions. Class modules are used when you need to model real-world objects and behaviors using objects and OOP concepts.
Code in standard modules cannot be reused by instantiating objects. Code in a class can be reused by instantiating multiple objects from the same class.
Standard modules do not require instantiating objects before accessing the members. Class modules require creating instance objects using Set ObjectName = New ClassName before accessing members.
Some key similarities between them:
Both can contain variable and procedure declarations to automate tasks in Excel.
Standard modules and class modules can call procedures declared in each other.
Both support parameter passing in procedures and functions.
Standard modules are mostly used for procedural programming whereas class modules support object-oriented features like encapsulation, inheritance, and polymorphism by modeling real-world entities as objects. Standard modules are simpler to use, while class modules make the code more organized, reusable and maintainable through object-oriented design principles. It is generally considered a best practice to use class modules for non-trivial projects to leverage the advantages of object-oriented programming.
Some examples of when to use each type:
Use standard modules for simple automation macros, stand-alone functions and utilities.
Use class modules to design object models for complex applications involving interrelated real-world objects like Employees, Customers, Orders, etc.
Create class modules to encapsulate common code for UI elements like forms, user controls, command buttons etc.
Design data access layer using classes as opposed to direct database calls from standard modules.
Apply inheritance and polymorphism using classes for extensible and maintainable code.
While both standard modules and class modules are useful for VBA development, class modules are more powerful as they support concepts of object-oriented programming for better code reusability, structure and maintenance in larger and more complex VBA applications. The module type needs to be chosen based on the specific project requirements and size. Standard modules are appropriate for simple procedural macros whereas class modules become necessary for serious object-oriented application development in Excel VBA.