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.
> 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 ...
comienza por visitar esta pagina:
Control Outlook from Excel
http://www.erlandsendata.no/english/index.php?d=envbaolecontroloutlook
en la seccion de preguntas y comentarios hay "tips" para otros objetos de OL
(como: "Outlook.AppointmentItem" y el calendario)
tambien puedes consultar en los foros de outlook
si cualquier duda (o informacion mas "precisa y detallada")... comentas ?
saludos,
hector.
>> 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 ...
aqui tienes un ejemplo con macros desde excel: http://tinyurl.com/q6kkeq
saludos,
hector.
Estoy interesado en el tema que comentas pero no consigo hacer la macro.. En
la primera web que citas me pierdo y en el ejemplo de macro no se como
meterle mano, necesitaria un poco de ayuda
Me gustaria de una hoja de excel me avisara de fechas proximas en el outlook
> No me salen las macros, necesito un poco de ayuda
puedes comentar (de preferencia, +/- exactamente) lo que intentas que no te esta funcionando ?
- la macro que estas usando/adaptando/...
- el rango y la hoja donde estan los datos (y el tipo de datos) para establecer la cita en outlook
- si al ejecutar la macro obtienes algun error (texto y numero del mensaje + linea que se marca en la macro)
- si ya ESTABLECISTE ?... una referencia a la libreria del modelo de objetos de outlook en tu proyecto de macros
saludos,
hector.
__ previos __
A ver no tengo ni idea de los scripts que comentas, lo unico que quiero es
que en un excel en el que tengo, por ejemplo, proveedores con fechas de
finalización de contrato me avise antes de las fechas que tengo en el excel..
Ejemplo
campofrio x x 28/05/09 x
navidul x x 05/06/09 x
Pues necesito, por ejemplo, que me avise una semana antes del vencimiento
del contrato.
Gracias
> A ver no tengo ni idea de los scripts que comentas
> lo unico que quiero es que en un excel en el que tengo, por ejemplo, proveedores con fechas de finalizacion de contrato
> me avise antes de las fechas que tengo en el excel...
> Ejemplo
> campofrio x x 28/05/09 x
> navidul x x 05/06/09 x
> Pues necesito, por ejemplo, que me avise una semana antes del vencimiento del contrato.
bueno... no pude "ver" cual es el rango ni la hoja donde tienes los datos :-((
el siguiente ejemplo "asume" que tienes un arreglo +/- asi
col-A: concepto de la cita, col-B: hora de incio, col-C: fecha de inicio, col-D: hora de termino, col-E: fecha de termino
titulos en la fila 1, los datos inician en la fila 2, y la macro que me ha funcionado es la siguiente:
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 = Format(Range("b" & Fila).Value, "hh:mm AMPM") & _
Format(Range("c" & Fila).Value, "mm/dd/yyyy")
Cita.End = Format(Range("d" & Fila).Value, "hh:mm AMPM") & _
Format(Range("e" & Fila).Value, "mm/dd/yyyy")
Cita.ReminderMinutesBeforeStart = 10080 ' 7(dias) x 24(horas) x 60(minutos)
Cita.ReminderPlaySound = True
Cita.Save
Next
nOutlook.Quit
Set nOutlook = Nothing
End Sub
saludos,
hector.
Primero que el outlook se cierra al ejecutar el script.
Segundo se pueden dar avisos sin el campo Hora¿? Es decir si el excel solo
contiene dias
Tercero se puede hacer de forma automatica la ejecucion del script? O hay
que entrar dentro del excel y darle a ejecutar?
Muchas Gracias por tu ayuda
1) outlook se cierra por efecto de la penultima instruccion: -> nOutlook.Quit
prueba a eliminarla o ponerle una marca de comentario al inicio de esa linea (un apostrofo -> ' )
2) (hasta donde se) la hora es necesaria para las "citas" en outlook (una posible alternativa ?)
si en excel solo tienes UNA fecha, prueba usando alguna hora "estandar" (para "Start" y "End")
3) la macro esta preparada para ejecutarse desde excel, puesto que en excel es donde tienes "los datos"
o sea, SI es necesario abrir excel y el archivo que contiene tanto los datos como la macro
si comentas detalles mas... "precisos", seria mas facil ofrecer propuestas mas... "precisas"
saludos,
hector.
__ OP __
> Bien parece que funciona bastante bien pero tengo tres dudas todavia..
> __ 1 __
> Primero que el outlook se cierra al ejecutar el script.
> __ 2 __
> Segundo se pueden dar avisos sin el campo Hora, Es decir si el excel solo contiene dias
> __ 3 __
> Tercero se puede hacer de forma automatica la ejecucion del script?
> O hay que entrar dentro del excel y darle a ejecutar?
__ previos __
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 ejecución, exactamente "se ha producido el error
'-2147467259 (8004005)' en tiempo de ejecución:
La fecha de finalización 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 razón 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
Muchas gracias, Un saludo
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
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
> 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.
> ... 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.
Mi pregunta es al soguiente,
este macro lo he usado en una base de datos que tengo con polizas de seguros
que vencen anualmente, y así me ha generado la advertencia en el outlook, en
el calendario por defecto de OTULOOK.
Resulta que he creado varios calendarios en outlook, uno para los
vencimientos de las pólzias de los automóviles, otra para los seguros de vida
etc. Cada una de estos listados los tengo en tablas independientes.
La pregunta es como hago para que la macro me agrege los avisos, en los
calendarios que he creado para cada motivo, es deir que la macro de la tabla
de "vencimientos de autos", me cree los avisos en el calendario "Vencimiento
de Autos".
Saludos. y mil y mil gracias nuevamente.
> Resulta que he creado varios calendarios en outlook, uno para los vencimientos de las polzias de los automoviles
> otra para los seguros de vida etc. Cada una de estos listados los tengo en tablas independientes.
> La pregunta es como hago para que la macro me agrege los avisos, en los calendarios que he creado para cada motivo
> es deir que la macro de la tabla de "vencimientos de autos", me cree los avisos en el calendario "Vencimiento de Autos"...
si tienes varias carpetas personalizadas en outlook, (probable o seguramente) te sera de utilidad el siguiente articulo:
Ejemplos de programacion para hacer referencia a elementos y carpetas en Outlook
http://support.microsoft.com/?kbid=208520
si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Lo siento, debes estar lleno de calama para soportarnos a los ignoranes
totales. como yo.
Saludos
Juan Camilo
> ... la verdad no entiendo casi nada de programacion, y con ese articulo quedo super perdido.
> ... debes estar lleno de calama para soportarnos a los ignoranes totales. como yo.
he hecho algunas pruebas pero aun no logro que las citas quden sembradas en calendarios personalizados :-((
tambien he puesto un mensaje en el foro de outlook, por si quieres darle seguimiento en ese grupo mas especializado (?)
por lo de la "calma"... ni te aflijas ni preocupes, que precisamente de los "ignorantes totales"...
(empezando conmigo mismo, que NO "naci ense�ado") es de quienes mas he aprendido :))
saludos,
hector.
(por si regresas a ver esta consulta)...
el siguiente codigo es el que ma ha funcionado...
saludos,
hector.
Sub Agendar_en_miCalendario()
Dim miOutlook As Object, miCalendario As Object, miCita As Object, _
Fila As Integer, uFila As Integer
uFila = Range("a65536").End(xlUp).Row
On Error GoTo Crear
Set miOutlook = GetObject(, "outlook.application")
If Err = 0 Then GoTo Creado
Crear:
Err.Clear
Set miOutlook = CreateObject("outlook.application")
Creado:
On Error GoTo 0
For Fila = 2 To uFila
' en la col-B se tienen los nombres de los calendarios
Set miCalendario = miOutlook.Session.GetDefaultFolder(9).Folders.Item(Range("b" & Fila).Text)
Set miCita = miCalendario.Items.Add(1)
' en la col-A se tienen los identificadores de las polizas
miCita.Subject = "Vencimiento poliza: " & Range("a" & Fila).Value
' en la col-C se tienen las fechas de los vencimientos
miCita.Start = "09:00 am" & Format(Range("c" & Fila).Value, "mm/dd/yyyy")
miCita.End = "9:15 am" & Format(Range("c" & Fila).Value, "mm/dd/yyyy")
miCita.ReminderMinutesBeforeStart = 0 ' se deja en 0 para que avise en ese momento
miCita.ReminderPlaySound = True
miCita.Save
Next
' miOutlook.Quit
Set miCita = Nothing
Set miCalendario = Nothing
Set miOutlook = Nothing
End Sub
gracias de antemano
> ... este ultimo codigo lo escribo en la macro de excel?
> y a la vez que se hace para activar esta macro ligarlo a un boton?
1) el codigo se copia/pega (o escribe) en un modulo estandar en el editor de vba
- abres el editor de vba (atajo de teclado: alt + F11)
- insertas un modulo de codigo (menu: inserar / modulo)
2) la macro la puedes ejecutar de varias formas:
- llamando el dialogo de macros (atajo de teclado: alt + F8)
- asignandola a un objeto incrustado (p.e. un boton de la barra "formularios")
- asignando a la macro un atajo de teclado (en opciones del dialogo con alt + F8)
- etc.
saludos,
hector.
__ OP __
On 5 ago, 14:25, "Héctor Miguel" <NOhemiordiS...@PLShotmail.com>
wrote:
> Ya:
> If Range("e" & Fila) <> "" Then
> jejeje que pena la pregunta tonta...
la pregunta "tonta", es aquella que no se formula
(a menos que la duda haya quedado ya resuelta ?)
saludos,
hector.
__ OP __
>> Una pregunta:
>> Como puedo controlar las celdas vacias? ...