Error de compilación. No se encontró el método o dato miembro.

He creado una pequeña aplicación en Excel -VBA para que automáticamente me cargue citas en el calendario de Outlook cuando presiono un CommandButton de mi UserForm.

Resulta que a la ahora de definir la fecha y hora a la que se debe crear dicha cita en mi calendario no me permite darle automaticamente el valor que recoge de un TextBox de dicho UserForm. No entiendo por qué me pasa esto, ya que cuando realizo lo mismo para .Subject y le refenrecio al valor que aparece en otro TextBox ("Asunto" se llama) de mi UserForm no me da ningún problema. Adjunto código señalando las partes en las que me da error.

Sub CrearCita()
Dim oAPP As New Outlook.Application
Dim ns As Outlook.Namespace
Dim cita As Outlook.AppointmentItem
Dim Titulo As String
Dim TransRowRng As Range
Dim NewRow As Integer
Titulo = "Seguimiento ScrowAccount"
Set TransRowRng = ThisWorkbook.Worksheets("Tareas").Cells(1, 1).CurrentRegion
    NewRow = TransRowRng.Rows.Count + 1
    With ThisWorkbook.Worksheets("Tareas")
        .Cells(NewRow, 1).Value = ScrowAccount.Asunto.Value
        .Cells(NewRow, 2).Value = ScrowAccount.TextBox2.Value
        .Cells(NewRow, 3).Value = ScrowAccount.TextBox3.Value
        .Cells(NewRow, 4).Value = ScrowAccount.TextBox4.Value
    End With
    If ScrowAccount.CheckBox1 = False Then
        Set oAPP = GetOutlookApp
        If oAPP Is Nothing Then
            MsgBox "No se puede iniciar Outlook.", vbInformation, Titulo
            Unload ScrowAccount
            Exit Sub
        End If
        Set ns = oAPP.GetNamespace("MAPI")
        Set cita = oAPP.CreateItem(olAppointmentItem)
        With cita
            'Las dos líneas de codigo siguientes son las referenciadas en el enunciado de la pregunta
            .Subject = ScrowAccount.Asunto.Value
            .Start = ScrowAccount.FechaInicio.Value
            'La línea de código siguiente es la única forma que he encontrado para que me deje compilar
            '.End = DateSerial(2018, 10, 30) + TimeSerial(9, 36, 0)
            .Body = ScrowAccount.TextBox4.Value
            .Importance = olImportanceHigh
            .ReminderMinutesBeforeStart = 10
            .Save
        End With
    Else
    End If
           MsgBox "Aviso creado con éxito.", vbInformation, Titulo
    Unload ScrowAccount
Exit Sub
End Sub

Quiero poder realizar esto ya que la fecha y hora de cada cita creada varía dependiendo el valor con el que se rellene el TextBox correspondiente de mi UserForm, como pasa con .Subject, que varía dependiendo el valor que haya en mi TextBox llamado "Asunto" de mi userform cada vez que le doy al botón que antes dije.

1 respuesta

Respuesta
1

Ya probé tu macro y puse 2 textbox

En el textbox FechaInicio puse:

31/10/2018 12:30

Y en el TextBox3 puse:

31/10/2018 15:30

Ejecuté tu macro y me creó la cita.

En tu macro cambié esta línea 

.End = DateSerial(2018, 10, 30) + TimeSerial(9, 36, 0)

Por esta:

.End = CDate(TextBox3.Value)

Y me funcionó.


Si no te funciona, entonces puedes convertir la fecha del textbox a valores, por ejemplo:

            fecha = CDate(TextBox3)
            año = Year(fecha)
            mes = Month(fecha)
            dia = Day(fecha)
            hora = Hour(fecha)
            minu = Minute(fecha)
            segu = Second(fecha)
            .End = DateSerial(año, mes, dia) + TimeSerial(hora, minu, segu)

Si no te funciona puedes cambiar el parámetro .End por .Duration

Si la cita va a durar 90 minutos, entonces en el textbox3 puedes capturar 90

Y lo pones así:

 .Duration = Val(TextBox3.Value)

Entonces si la cita empieza a las 9:30 am, en la fecha fina aparecerá 11:00 am


Prueba y me comentas.

[Si te ayudó la información, no olvides valorar la respuesta.

Buenos días Dante,

Antes de nada muchísimas gracias por la respuesta. Le expongo un poco más como quiero que funcione mi aplicación para que así sea más conciso. Siento las molestias.

1. Dispongo de una hoja de Excel en la que tengo una lista de citas con columnas con sus respectivos encabezados: Asunto, Fecha Inicio, Fecha fin, Hora del aviso, y Comentarios.

2. Le he colocado un botón a dicha hoja que cuando se presiona sobre él se ejecuta una macro que me abre un UserForm con varios TextBox y dos botones (Aceptar y Cerrar). Una vez se me abra el UserForm, se puede ver que automáticamente en cada uno de los TextBox con la información correspondiente de la hoja de trabajo. Es decir, añado una linea en la hoja de excel, ejecuto la macro y se me abre el UserForm ya completado con la información contenida en esta última linea que he escrito en mi hoja de Excel.

3. Cuando le doy al botón ACEPTAR se me ejecuta la macro que puse en mi pregunta. Esta macro lo que realiza es crear una Cita en el calendario de Outlook con la información contenida en los TextBox de mi UserForm. 

Ahora bien, mi consulta es:

Me deja sin problema escribir esta parte referenciándome a un TextBox de mi UserForm para el .Subject de la cita

 .Subject = ScrowAccount.Asunto.Value

Pero cuando hago lo mismo para .Start & .End me salta "Error de compilación, se requiere un objeto." Adjunto lo que yo quiero que haga:

.Start = ScrowAccount.TextBox2.Value
.End = ScrowAccount.TextBox5.Value

ACLARACIÓN:  ScrowAccount es el nombre de mi UserForm, TextBox2 es la fecha de inicio de la cita y TextBox5 es la fecha de fin de cita.

En definitiva lo que quiero es que la cita se me cree con las fechas correspondientes que salgan en cada momento en los TextBox de mi UserForm.

He probado con:

.Start = CDate(TextBox2.Value)
.End = CDate(TextBox5.Value)

y me salta el mismo error.

Muchísimas gracias de antemano de verdad.

Un saludo y gracias por esta pedazo de web.

Tal vez es tu versión de office, yo la probé y me funciona en cualquier manera:

.End = TextBox5.Value
.End = CDate(TextBox5.Value)
            fecha = CDate(TextBox3)
            año = Year(fecha)
            mes = Month(fecha)
            dia = Day(fecha)
            hora = Hour(fecha)
            minu = Minute(fecha)
            segu = Second(fecha)
            .End = DateSerial(año, mes, dia) + TimeSerial(hora, minu, segu)

Desde el principio entendí el objetivo de tu pregunta, pero si no te funciona el parámetro .End, entonces debes buscar otra alternativa.

Comentaste esto:

'La línea de código siguiente es la única forma que he encontrado para que me deje compilar
'.End = DateSerial(2018, 10, 30) + TimeSerial(9, 36, 0)

Entonces te estoy proponiendo utilizar lo siguiente:

            fecha = CDate(TextBox3)
            año = Year(fecha)
            mes = Month(fecha)
            dia = Day(fecha)
            hora = Hour(fecha)
            minu = Minute(fecha)
            segu = Second(fecha)
            .End = DateSerial(año, mes, dia) + TimeSerial(hora, minu, segu)

De esa forma puedes obtener los datos de la fecha.


Y si tampoco te funciona, entonces la otra alternativa es utilizar el parámetro .Duration

Si tienes la fecha inicial y la fecha final, puedes calcular cuántos minutos existen entre una fecha y otra, entonces los pasas como parámetro en el parámetro .Duration

¿Probaste con el parámetro .Duration?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas