Los módulos de clases se usan, como su nombre dice, para crear tus propias clases. Esto es POO (Programación Orientada a Objetos) que en VBA casi nadie usa, no sé por qué todos programan de manera procesal, al menos aquí en Todoexpertos no he visto pregunta o respuesta sobre esto hasta ahora. Yo personalmente programo todo orientado a objetos creando mis propias clases y objetos ya que me parece la mejor manera de programar, más profesional y te abre muchas más opciones en tu aplicación, como por ejemplo, crear un formulario que se pueda Maximizar, Minimizar a la barra de tareas, ponerle icono en la barra de título, y que se comporte como cualquier ventana del sistema operativo, que todos sabemos que los UserForms de Excel no hacen eso.
Un modulo de clase representa una clase. Para crear mas clases, debes crear mas módulos de clases. Dentro de cada modulo define las propiedades y métodos que tendrán tus objetos.
Una propiedad es un valor o una característica del objeto. Un método es una acción que el objeto puede ejecutar.
Por ejemplo, digamos que tienes una hoja en la que agregas información de estudiantes.
Un estudiante tiene un nombre, tiene una edad, pertenece a un curso, tiene una nota. Cada una de esas cosas serian propiedades del estudiante.
Ahora, un objeto Estudiante puede: almacenarse en la hoja, borrarse de la hoja, editarse, cambiarse de curso, cambiar la nota. Esos serian métodos, acciones que el objeto estudiante puede ejecutar.
En un modulo de clases puedes escribir macros como mismo lo harías en un módulo estándar, pero este módulo tiene sus propias rutinas únicas, que son el Property Get y el Property Let.
Con esas rutinas defines la lectura y escritura de una propiedad. Te pondré un ejemplo, volviendo al estudiante.
Para definir su propiedad Nombre, por ejemplo, pondrías el siguiente código en un módulo de clases llamado clsEstudiante:
Private pNombre as String
Public Property Get Nombre() As String
Nombre = pNombre
End Property
Public Property Let Nombre(Value As String)
pNombre = Value
End Property
Luego en un módulo estándar crearías el objeto y llamarías a la propiedad Nombre así:
Sub TestCalss()
Dim Estudiante As clsEstudiante
Set Estudiante = New clsEstudiante
Estudiante.Nombre = "JUAN"
End Sub
Y como el objeto es de escritura, pero también de lectura, puedes acceder al nombre usando Estudiante.Nombre
Y el programa devuelve lo que hay almacenado en la propiedad, en este caso JUAN
Obviamente esta es una clase básica y sencilla, pero con este concepto puedes programar lo que sea que imagines.
Andy Machin Veo que llevas un año aquí. Te preguntas porqué programamos de este modo en ‘este’ foro. Hay muchos foros Excel. Yo diría que éste es el de nivel básico o inicial. Donde llegan, en su mayoría, usuarios que no saben qué es un objeto, un evento e incluso mencionan 'hoja' cuando se trata de un libro. Todavía explicamos cómo entrar al Editor o con una imagen dónde colocar un código. - Elsa Matilde
Andy Machin Expresiones como Cells(3,5) no les queda muy en claro cuál es la fila y cuál la columna como si escribimos [E3] o mucho más claro aún es Range(“E3”).De todos modos no deja de ser interesante que algunos como tú dediquen más tiempo al aporte de conocimientos algo más elevados. Un saludo! - Elsa Matilde
Que tal Elsa, si entiendo eso. De todas formas yo me referia en general al lenguaje VBA, es poco usado el metodo POO en este lenguaje. Y en cuanto a foros, al igual que este en todos o casi todos es raro encontrar procedimientos orientados a objetos. No era nada personal con Todoexpertos - Andy Machin