** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Ayuda para desarrollar mi primera clase
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Ayuda para desarrollar mi primera clase

 Responder Responder
Autor
Mensaje
romerojonatan89 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 16/Septiembre/2022
Localización: Argentina
Estado: Sin conexión
Puntos: 3
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita romerojonatan89 Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Ayuda para desarrollar mi primera clase
    Enviado: 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.

Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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).




Editado por AnSanVal - 19/Septiembre/2022 a las 22:07
Saludos desde Tenerife.
Arriba
romerojonatan89 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 16/Septiembre/2022
Localización: Argentina
Estado: Sin conexión
Puntos: 3
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita romerojonatan89 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1510
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable