Ligar Excel y Outlook

16/05/2009 - 01:28 por Alex | Informe spam
Hola a todos

Tengo una hoja en Excel donde capturo varios datos dentro de los cuales
tengo una fecha que quisiera recordar, me gustaria saber si esta fecha la
puedo enviar a mi calendario de Outlook para que cuando sea la fecha me mande
avisos, igual en mi blackberry-. Gracias.

Preguntas similare

Leer las respuestas

#11 Héctor Miguel
28/05/2009 - 05:52 | Informe spam
hola, Javi !

para que puedas "retocar" codigos para otras necesidades/adaptaciones/... es necesario que lo entiendas ANTES de retocarlo
y esto puede ser tan sencillo como entender que las matematicas tienen su logica y la logica tiene sus matematicas :))

las fechas que "parecen" estar bien... seguramente lo estan (visualmente) para tus intenciones, pero...
NO lo estan en el sentido de los "momentos/eventos/..." que se administran en las lineas de codigo (me explico):

segun la "taba" que trataste de exponer (que por lo general no pasan bien cuando usas espacios y tabulaciones)
y segun las lineas del codigo que expones, se puede asumir que el arreglo de tus datos es +/- el siguiente:

- colA = los nombres de los contratantes
- colB = las fechas en que vencen sus contratos
- colC = un dato como el numero de contrato, y que aparece en algunos registros pero no en todos (???)
- colD = la fecha en la que requieres que outlook te haga un recordatorio

entonces, para establecer las citas en outlook...
1) debes poner la misma fecha tanto para "Cita.Start" como para "Cita.End" (o sea la fecha del vencimiento)

2) en el codigo de tu ejemplo estableces la fecha del recordatorio como la fecha para el "Cita.Start"
no creo que sea comun que una "cita" pueda llegar a tener una duracion de 15 dias o mas (?????)

3) para la parte de la "hora" de dichos eventos, se espera que la del "Start" sea anterior a la del "End" (logico no ?)
no se que tan "valido" sea poner una hora como 18:00 PM o debiera ser como 6:00 PM o simplemente 18:00 (?)

4) para el evento "Cita.ReminderMinutesBeforeStart" se espera con cuantos MINUTOS de anticipacion te va a recordar

5) en el codigo de tu ejemplo estableces 120 -minutos- que equivale a que el aviso sonara 2 HORAS antes

6) en el ejemplo te habia puesto un total (EN MINUTOS) de 10080 ' 7(dias) x 24(horas) x 60(minutos)

7) los MINUTOS antes que requieres para el "Reminder" debes obtenerlos de la diferencia de fechas
esto es: (vencimiento - recordatorio) x 24(horas) x 60(minutos)

si cualquier duda... comentas ?
saludos,
hector.

__ OP __
Ya no se cierra el outlook y parece que las horas no molestan, lo que tengo que retocar es lo siguiente:
Da un error en tiempo de ejecucion, exactamente "se ha producido el error '-2147467259 (8004005)' en tiempo de ejecucion:
La fecha de finalizacion especificada es anterior a la fecha de comienzo."
He comprobado las fechas y parecen estar bien...
Lo que he tenido que retocar un poko el script y hay algunas cosas que no se como tocar
la idea del script es que avise de una manera determinada..
Te dejo un ejemplo de como esta montado el excel:
nombre o razon social fecha fin ctto fecha comunicado
SIDETEX 31/03/2008 15/12/2007
SAN MIGUEL 30/04/2008 30 31/03/2008
REPSOL - GASOIL 14/06/2008 14/04/2008
Y asi es como quiero que me avise el outlook:
Aviso dia 15/12/2007
Finalizacion contrato SIDETEX

Te dejo el script como lo tengo ahora mismo:

Public Sub EstablecerCitasEnOutlook()
Dim nOutlook As Object, Cita As Object, _
Fila As Integer, uFila As Integer
uFila = Range("a65536").End(xlUp).Row
Set nOutlook = CreateObject("outlook.application")
For Fila = 2 To uFila
Set Cita = nOutlook.CreateItem(1)
Cita.Subject = Range("a" & Fila).Value
Cita.Start = "09:00 AM" & _
Format(Range("d" & Fila).Value, "dd/mm/yyyy")
Cita.End = "18:00 PM" & _
Format(Range("b" & Fila).Value, "dd/mm/yyyy")
Cita.ReminderMinutesBeforeStart = 120 ' 7(dias) x 24(horas) x 60(minutos)
Cita.ReminderPlaySound = True
Cita.Save
Next
'nOutlook.Quit
Set nOutlook = Nothing
End Sub
Respuesta Responder a este mensaje
#12 Javi
28/05/2009 - 10:23 | Informe spam
Vale parece que ya empiezo a entender, aunque veo que algunos datos no me
harán falta, creo que con el proveedor y la fecha de aviso me basta, me
estaba haciendo un lio con los avisos de outlook ya que no habia mirado el
calendario el cual si pone todo lo que pongo en el script..

Tengo una última cuestion para ti Héctor, es un problema que no se si se
podrá resolver facilmente, una vez cargados correctamente los avisos al
calendario de outlook como puedo hacer para que cuando actualicemos el excel
y volvamos a ejecutar la macro no me duplique los avisos¿?¿?

Te dejo el script final:

Public Sub EstablecerCitasEnOutlook()
Dim nOutlook As Object, Cita As Object, _
Fila As Integer, uFila As Integer
uFila = Range("a65536").End(xlUp).Row
Set nOutlook = CreateObject("outlook.application")
For Fila = 2 To uFila
Set Cita = nOutlook.CreateItem(1)
Cita.Subject = ("Finalizacion contrato " & Range("a" & Fila).Value)
Cita.Start = "09:00 AM" & _
Format(Range("d" & Fila).Value, "dd/mm/yyyy")
Cita.End = "9:15 AM" & _
Format(Range("d" & Fila).Value, "dd/mm/yyyy")
Cita.ReminderMinutesBeforeStart = 0 ' Lo dejo a 0 ya que quiero que me avise
ese dia
Cita.ReminderPlaySound = True
Cita.Save
Next
'nOutlook.Quit
Set nOutlook = Nothing
End Sub

Muchas gracias, Saludos

"Héctor Miguel" wrote:

hola, Javi !

para que puedas "retocar" codigos para otras necesidades/adaptaciones/... es necesario que lo entiendas ANTES de retocarlo
y esto puede ser tan sencillo como entender que las matematicas tienen su logica y la logica tiene sus matematicas :))

las fechas que "parecen" estar bien... seguramente lo estan (visualmente) para tus intenciones, pero...
NO lo estan en el sentido de los "momentos/eventos/..." que se administran en las lineas de codigo (me explico):

segun la "taba" que trataste de exponer (que por lo general no pasan bien cuando usas espacios y tabulaciones)
y segun las lineas del codigo que expones, se puede asumir que el arreglo de tus datos es +/- el siguiente:

- colA = los nombres de los contratantes
- colB = las fechas en que vencen sus contratos
- colC = un dato como el numero de contrato, y que aparece en algunos registros pero no en todos (???)
- colD = la fecha en la que requieres que outlook te haga un recordatorio

entonces, para establecer las citas en outlook...
1) debes poner la misma fecha tanto para "Cita.Start" como para "Cita.End" (o sea la fecha del vencimiento)

2) en el codigo de tu ejemplo estableces la fecha del recordatorio como la fecha para el "Cita.Start"
no creo que sea comun que una "cita" pueda llegar a tener una duracion de 15 dias o mas (?????)

3) para la parte de la "hora" de dichos eventos, se espera que la del "Start" sea anterior a la del "End" (logico no ?)
no se que tan "valido" sea poner una hora como 18:00 PM o debiera ser como 6:00 PM o simplemente 18:00 (?)

4) para el evento "Cita.ReminderMinutesBeforeStart" se espera con cuantos MINUTOS de anticipacion te va a recordar

5) en el codigo de tu ejemplo estableces 120 -minutos- que equivale a que el aviso sonara 2 HORAS antes

6) en el ejemplo te habia puesto un total (EN MINUTOS) de 10080 ' 7(dias) x 24(horas) x 60(minutos)

7) los MINUTOS antes que requieres para el "Reminder" debes obtenerlos de la diferencia de fechas
esto es: (vencimiento - recordatorio) x 24(horas) x 60(minutos)

si cualquier duda... comentas ?
saludos,
hector.

__ OP __
> Ya no se cierra el outlook y parece que las horas no molestan, lo que tengo que retocar es lo siguiente:
> Da un error en tiempo de ejecucion, exactamente "se ha producido el error '-2147467259 (8004005)' en tiempo de ejecucion:
> La fecha de finalizacion especificada es anterior a la fecha de comienzo."
> He comprobado las fechas y parecen estar bien...
> Lo que he tenido que retocar un poko el script y hay algunas cosas que no se como tocar
> la idea del script es que avise de una manera determinada..
> Te dejo un ejemplo de como esta montado el excel:
> nombre o razon social fecha fin ctto fecha comunicado
> SIDETEX 31/03/2008 15/12/2007
> SAN MIGUEL 30/04/2008 30 31/03/2008
> REPSOL - GASOIL 14/06/2008 14/04/2008
> Y asi es como quiero que me avise el outlook:
> Aviso dia 15/12/2007
> Finalizacion contrato SIDETEX
>
> Te dejo el script como lo tengo ahora mismo:
>
> Public Sub EstablecerCitasEnOutlook()
> Dim nOutlook As Object, Cita As Object, _
> Fila As Integer, uFila As Integer
> uFila = Range("a65536").End(xlUp).Row
> Set nOutlook = CreateObject("outlook.application")
> For Fila = 2 To uFila
> Set Cita = nOutlook.CreateItem(1)
> Cita.Subject = Range("a" & Fila).Value
> Cita.Start = "09:00 AM" & _
> Format(Range("d" & Fila).Value, "dd/mm/yyyy")
> Cita.End = "18:00 PM" & _
> Format(Range("b" & Fila).Value, "dd/mm/yyyy")
> Cita.ReminderMinutesBeforeStart = 120 ' 7(dias) x 24(horas) x 60(minutos)
> Cita.ReminderPlaySound = True
> Cita.Save
> Next
> 'nOutlook.Quit
> Set nOutlook = Nothing
> End Sub



Respuesta Responder a este mensaje
#13 Javi
28/05/2009 - 11:30 | Informe spam
También he encontrado un pequeño problema, la macro no recoge nunca la ultima
linea, es decir, procesa todos los datos pero en la ultima linea no hace
nada..
Respuesta Responder a este mensaje
#14 Héctor Miguel
29/05/2009 - 02:53 | Informe spam
hola, Javi !

Vale parece que ya empiezo a entender, aunque veo que algunos datos no me haran falta
creo que con el proveedor y la fecha de aviso me basta, me estaba haciendo un lio con los avisos de outlook
ya que no habia mirado el calendario el cual si pone todo lo que pongo en el script.
Tengo... un problema... una vez cargados correctamente los avisos al calendario de outlook
como puedo hacer para que cuando actualicemos el excel y volvamos a ejecutar la macro no me duplique los avisos ...



dependiendo de la forma y metodo utilizados para actualizar el arcchivo de excel (???)
creo que la forma mas facil podria ser una columna adicional (suponiendo que puede ser al col-E)
donde el codigo pueda verificar si previamente ya se habia registrado o proceder a registrar y marcar en la col-E (?)

asumiendo que la col-E es la que se puede utilizar, la macro podria quedar +/- como sigue:

Public Const Clave As String = "Agendado"
Public Sub EstablecerCitasEnOutlook()
Dim nOutlook As Object, Cita As Object, _
Fila As Integer, uFila As Integer
uFila = Range("a65536").End(xlUp).Row
Set nOutlook = CreateObject("outlook.application")
For Fila = 2 To uFila
If Range("e" & Fila) <> Clave Then
Set Cita = nOutlook.CreateItem(1)
Cita.Subject = ("Finalizacion contrato " & Range("a" & Fila).Value)
Cita.Start = "09:00 AM" & _
Format(Range("d" & Fila).Value, "dd/mm/yyyy")
Cita.End = "9:15 AM" & _
Format(Range("d" & Fila).Value, "dd/mm/yyyy")
Cita.ReminderMinutesBeforeStart = 0 ' Lo dejo a 0 ya que quiero que me avise ese dia
Cita.ReminderPlaySound = True
Cita.Save
Range("e" & Fila) = Clave
End If
Next
' nOutlook.Quit
Set Cita = Nothing
Set nOutlook = Nothing
End Sub

saludos,
hector.
Respuesta Responder a este mensaje
#15 Héctor Miguel
29/05/2009 - 02:55 | Informe spam
hola, Javi !

... he encontrado un pequeno problema, la macro no recoge nunca la ultima linea, es decir
procesa todos los datos pero en la ultima linea no hace nada..



comprueba si la "ultima" linea tiene datos en la clumna A (que es la base del codigo)
ya que la ultima linea el codigo la establece con la instruccion:
uFila = Range("a65536").End(xlUp).Row

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida