Imprimir página | Cerrar ventana

Ayuda para desarrollar mi primera clase

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Excel
Descripción del foro: Foro de Excel y VBA de Excel
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86469
Fecha de impresión: 26/Marzo/2026 a las 20:58


Tema: Ayuda para desarrollar mi primera clase
Publicado por: romerojonatan89
Asunto: Ayuda para desarrollar mi primera clase
Fecha de publicación: 16/Septiembre/2022 a las 23:52
Buenas tardes.
Estoy intentando desarrollar mi primera clase que es el punto de partida para hacer un programita más desarrollado.

El código de mi clase FechaDiagramador es:
Option Explicit

Private iFecha As Date
Private iColumna As Integer


Private Sub Class_Initialize()
End Sub

Public Sub inicializar(unRango As Range)
    Fecha = unRango.Value
    Columna = unRango.Column
End Sub

Public Property Let desdeRango(unRango As Range)
    Fecha = unRango.Value
    Columna = unRango.Column
End Property

Public Property Get Fecha() As Date
    Fecha = iFecha
End Property

Public Property Let Fecha(unaFecha As Date)
    iFecha = unaFecha
End Property

Public Property Get Columna() As Integer
    Columna = iColumna
End Property

Public Property Let Columna(unaColumna As Integer)
    iColumna = unaColumna
End Property

Y el código del módulo con el que lo quiero probar es:
Option Explicit

Sub algo()
Dim f As FechaDiagramador
Set f = New FechaDiagramador

Dim ra As Range
Set ra = Range("A1")
MsgBox (ra.Value) 'muestra correctamente el valor de "A1", que es una fecha.

f.inicializar (ra)

End Sub

Como resultado siempre de devuelve el error 424: Se requiere un objeto.
No estoy comprendiendo cuál es el problema.




Respuestas:
Publicado por: AnSanVal
Fecha de publicación: 17/Septiembre/2022 a las 22:01
Si esa es tu primera clase... entiendo que deberías consultar al profesor o profesora.


EDITADO (19/09/2022).- Me ha comentado un compañero que cuando dices «... mi primera clase...», posiblemente te refieres a «... mi primer módulo de clase...», con lo que mi idea inicial quedaría sin valor, lo lamento.

Si este es tu caso (releyendo tu consulta tiene sentido), mi posible ayuda no tendría mucho valor ya que mi experiencia en el tema de módulos de clase es muy limitada. Pero sí puedo comentarte que tu código hace referencia a FechaDiagramador y este objeto no existe (aún) en tu código (posiblemente sea lo que motiva el error).




-------------
Saludos desde Tenerife.


Publicado por: romerojonatan89
Fecha de publicación: 21/Septiembre/2022 a las 21:52
Hola, muchas gracias por responder.
Y perdón por la demora, no me saltó la notificación de respuesta.
La clase FechaDiagramador es lo que está definido en el primer código, solo que en VBA la declaración de la clase se hace a través de "insertar módulo de clase" y luego en el recuadro de propiedades de objetos, en la propiedad "name" se indica el nombre de la clase.
De hecho, la clase funciona bien... es solo que al querer pasar el un rango, no me lo toma.

De hecho, estos dos códigos harían lo mismo. Pero el primero no funciona y el segundo sí.
Bien se que lo podría usar así y ya, pero necesito sacarme esta duda porque cuando necesite hacer un método que reciba más parámetros, no voy a poder usar la "Property Let":

Public Sub inicializar(unRango As Range) '<-- NO FUNCIONA
    Fecha = unRango.Value
    Columna = unRango.Column
End Sub

Public Property Let desdeRango(unRango As Range) '<-- FUNCIONA
    Fecha = unRango.Value
    Columna = unRango.Column
End Property


Publicado por: pitxiku
Fecha de publicación: 22/Septiembre/2022 a las 19:06
VBA no sabe lo que es Fecha o de dónde viene. Tienes que decirle que es la propiedad de la propia clase, o usar las variables privadas que tienes definidas para guardar los valores:

Public Sub inicializar_V1(unRango As Range)
    Me.Fecha = unRango.Value
    Me.Columna = unRango.Column
End Sub

Public Sub inicializar_V2(unRango As Range)
    iFecha = unRango.Value
    iColumna = unRango.Column
End Sub



Imprimir página | Cerrar ventana