Fijar fecha

27/09/2008 - 16:44 por Julián | Informe spam
En el día de ayer decidí probar con la solución aportada por Héctor Miguel,
porque significaría un avance en mis libros de cálculo. Sin embargo, me
encuentro con que el resultado es contrario a la explicación dada por Héctor,
en mi caso es igual que si hubiera utilizado HOY() o ahora(). Esto me hace
pensar que algo estoy haciendo mal, aunque no se lo que es.
Tengo Excel 2007. Hice lo siguiente:
1. Abrí un nuevo libro en el que en las celdas A1:A10 puse la función
indicada por Héctor, es decir: =SI(B4<>"";miFecha(B4))
2. Inserté un módulo general denominado miFecha, con el código copiado de la
respuesta de Héctor:
Function miFecha(Celda As Range) As Date
Volatile = False
miFecha = Now
End Function
3. En el libro de Excel tengo:

27/09/2008 12544
27/09/2008 2563
27/09/2008 1256
27/09/2008 456
FALSO
FALSO
4. La fecha que indicaba el libro, en el día de ayer, era el 26/09/2008 y
sin embargo hoy esa fecha está actualizada a la fecha del día, por lo que
supongo que mañana indicará la fecha de mañana y cada día la que corresponda.
¿Qué es lo que hago mal?

Saludos,
Julián.

Preguntas similare

Leer las respuestas

#6 Julián
28/09/2008 - 18:29 | Informe spam
Buenas tardes,
Héctor Miguel, considero que los pasos que he seguido son los mismos que me
indicas en tu respuesta, sin embargo en mi libro las fechas se actualizan.
Tengo que hacer una observación y es que no se programar en vba.
La versión de Excel es la 2007, insisto en esto porque no se si es relevante
para la pregunta realizada.
He observado que después de crear el libro, cerrarlo y cambiar la fecha del
sistema, cuando lo abro nuevamente aparecen las distintas fechas que tenía
cuando lo cerré, pero en el momento en que le contesto a Excel que habilite
las macros, en este mismo momento se actualizan las fechas del libro con la
que tiene el sistema.
Para insertar un modulo general voy al menú insertar y, de las posibilidades
que me ofrece Excel (Procedimiento, UseForm, Módulo, Módulo de clase) elijo
Módulo.
Si observo las carpetas veo lo siguiente:
VBAPROJECT (Prueba.xls) opté también por probar con la versión compatible
Excel 2003.
La siguiente carpeta es Microsoft Excel Objetos (Hoja 1,….)
La siguiente carpeta es Módulos, apareciendo módulo 1 con el código:
Function miFecha(Celda As Range) As Date
Volatile = False
miFecha = Now
End Function
Si lo anterior sirve para localizar el error que, seguramente estoy
cometiendo, bien; en caso contrario seguiré poniendo las fechas directamente.
De todas formas muchas gracias por el interés en ayudarme.


Saludos,
Julián.


"Héctor Miguel" escribió:

hola, Julián !

> He cambiado el nombre varias veces; el resultado es el mismo. El ultimo es:
> Function miPrueba33(Celda As Range) As Date
> Volatile = False
> miPrueba33 = Now
> End Function
> En el libro de Excel se actualiza la fecha con la que tiene el ordenador.
> como puedo hacer para que la fecha no cambie?

1) he creado un libro nuevo, le inserto un modulo estandar (Modulo1) con el codigo de la funcion

2) en la hoja1 uso la funcion en el rango A1:A10 -> =SI(B2<>"",miFecha(B2))
y en el rango C2:C10 uso la funcion: =AHORA()

3) en ambos rangos aplico un formato personaizado de: d/mm/aa h:mm

4) ingresando a intervalos de un minuto datos en el rango A2:A5 obtengo lo siguiente:
27/Sep/08 18:40 <-> 12 <-> 27/Sep/08 18:43
27/Sep/08 18:41 <-> 34 <-> 27/Sep/08 18:43
27/Sep/08 18:42 <-> 56 <-> 27/Sep/08 18:43
27/Sep/08 18:43 <-> 78 <-> 27/Sep/08 18:43
-> notaras que los rangos "previos" NO se modifican en su resultado ;)
-> guardo y cierro el libro... cambio la fecha del sistema (un dia mas)

5) vuelvo a abrir el libro... lo que obtengo es:
27/Sep/08 18:40 <-> 12 <-> 28/Sep/08 18:45
27/Sep/08 18:41 <-> 34 <-> 28/Sep/08 18:45
27/Sep/08 18:42 <-> 56 <-> 28/Sep/08 18:45
27/Sep/08 18:43 <-> 78 <-> 28/Sep/08 18:45
-> (nuevamente) notaras que los rangos "previos" NO se modifican en su resultado ;)

saludos,
hector.

__ OP __
>> es probable que la situacion que se te presenta se deba a tu comentario donde dices:
>> " 2. Inserte un modulo general denominado miFecha, con el codigo copiado de la respuesta de Hector"
>>
>> por lo que deberas saber que vba encuentra "dificultades" (por no decir "no le gusta")
>> cuando un moudlo de codigo tiene el mismo nombre que algun procedimiento (sub o function) :-((
>>
>> __ OP __
>> > En el dia de ayer decidi probar con la solucion aportada por Hector Miguel, porque significaria un avance en mis libros de calculo.
>> > Sin embargo, me encuentro con que el resultado es contrario a la explicacion dada por Hector,
>> > en mi caso es igual que si hubiera utilizado HOY() o ahora().
>> > Esto me hace pensar que algo estoy haciendo mal, aunque no se lo que es.
>> > Tengo Excel 2007. Hice lo siguiente:
>> > 1. Abri un nuevo libro en el que en las celdas A1:A10 puse la funcion indicada por Hector, es decir: =SI(B4<>"";miFecha(B4))
>> > 2. Inserte un modulo general denominado miFecha, con el codigo copiado de la respuesta de Hector:
>> > Function miFecha(Celda As Range) As Date
>> > Volatile = False
>> > miFecha = Now
>> > End Function
>> > 3. En el libro de Excel tengo:
>> > 27/09/2008 12544
>> > 27/09/2008 2563
>> > 27/09/2008 1256
>> > 27/09/2008 456
>> > FALSO
>> > FALSO
>> > 4. La fecha que indicaba el libro, en el dia de ayer, era el 26/09/2008 y sin embargo hoy esa fecha esta actualizada a la fecha del dia
>> > por lo que supongo que manana indicara la fecha de manana y cada dia la que corresponda.
>> > Que es lo que hago mal?



Respuesta Responder a este mensaje
#7 Julián
28/09/2008 - 18:44 | Informe spam
Buenas tardes,
Servando, he probado las indicaciones que me haces.
Con la primera sugerencia Excel da el siguiente error:
El nombre especificado no es válido.
Puede deberse a que:
El nombre no comienza por una letra o un carácter de subrayado.
El nombre contiene un espacio u otro carácter no válido.
El nombre está un conflicto con un nombre integrado en Excel o con el nombre
de otro objeto del libro.
He probado a sustituir Worksheet_Change por miPrueba; en este caso el
resultado es:
#¡VALOR! 1
FALSO
FALSO
La columna A está formateada con fecha.
Al introducir el valor en B2 aparece el mensaje de “referencia circular”.
Con la segunda sugerencia Excel da el mismo error que con la anterior, es
decir, el nombre especificado no es válido.
Gracias por la ayuda.

Saludos,
Julián.


"Servando" escribió:

Espero reivindicarme por el error anotado en el anterior post.

Con este codigo no se actualiza la celda de la Col A si en esta ya hay algo.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
If Target.Offset(0, -1).Value = "" Then
Target.Offset(0, -1).Value = Date
End If
End If
End Sub

Con este codigo no importa si ya contiene algo, cada modificacion en la
celda de la columna B afectara la celda de la columna A.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
Target.Offset(0, -1).Value = Date
End If
End Sub

Si interesa tambien la Hora de captura o modificacion, entonces hay que
cambiar "Date" por "Now", asi como el correspondiente formato en la celda.
Por favor, retroalimentanos y dinos si esto te fue de utilidad.

Saludos
Servando Villalon


"Héctor Miguel" wrote:

> hola, Julián !
>
> > He cambiado el nombre varias veces; el resultado es el mismo. El ultimo es:
> > Function miPrueba33(Celda As Range) As Date
> > Volatile = False
> > miPrueba33 = Now
> > End Function
> > En el libro de Excel se actualiza la fecha con la que tiene el ordenador.
> > como puedo hacer para que la fecha no cambie?
>
> 1) he creado un libro nuevo, le inserto un modulo estandar (Modulo1) con el codigo de la funcion
>
> 2) en la hoja1 uso la funcion en el rango A1:A10 -> =SI(B2<>"",miFecha(B2))
> y en el rango C2:C10 uso la funcion: =AHORA()
>
> 3) en ambos rangos aplico un formato personaizado de: d/mm/aa h:mm
>
> 4) ingresando a intervalos de un minuto datos en el rango A2:A5 obtengo lo siguiente:
> 27/Sep/08 18:40 <-> 12 <-> 27/Sep/08 18:43
> 27/Sep/08 18:41 <-> 34 <-> 27/Sep/08 18:43
> 27/Sep/08 18:42 <-> 56 <-> 27/Sep/08 18:43
> 27/Sep/08 18:43 <-> 78 <-> 27/Sep/08 18:43
> -> notaras que los rangos "previos" NO se modifican en su resultado ;)
> -> guardo y cierro el libro... cambio la fecha del sistema (un dia mas)
>
> 5) vuelvo a abrir el libro... lo que obtengo es:
> 27/Sep/08 18:40 <-> 12 <-> 28/Sep/08 18:45
> 27/Sep/08 18:41 <-> 34 <-> 28/Sep/08 18:45
> 27/Sep/08 18:42 <-> 56 <-> 28/Sep/08 18:45
> 27/Sep/08 18:43 <-> 78 <-> 28/Sep/08 18:45
> -> (nuevamente) notaras que los rangos "previos" NO se modifican en su resultado ;)
>
> saludos,
> hector.
>
> __ OP __
> >> es probable que la situacion que se te presenta se deba a tu comentario donde dices:
> >> " 2. Inserte un modulo general denominado miFecha, con el codigo copiado de la respuesta de Hector"
> >>
> >> por lo que deberas saber que vba encuentra "dificultades" (por no decir "no le gusta")
> >> cuando un moudlo de codigo tiene el mismo nombre que algun procedimiento (sub o function) :-((
> >>
> >> __ OP __
> >> > En el dia de ayer decidi probar con la solucion aportada por Hector Miguel, porque significaria un avance en mis libros de calculo.
> >> > Sin embargo, me encuentro con que el resultado es contrario a la explicacion dada por Hector,
> >> > en mi caso es igual que si hubiera utilizado HOY() o ahora().
> >> > Esto me hace pensar que algo estoy haciendo mal, aunque no se lo que es.
> >> > Tengo Excel 2007. Hice lo siguiente:
> >> > 1. Abri un nuevo libro en el que en las celdas A1:A10 puse la funcion indicada por Hector, es decir: =SI(B4<>"";miFecha(B4))
> >> > 2. Inserte un modulo general denominado miFecha, con el codigo copiado de la respuesta de Hector:
> >> > Function miFecha(Celda As Range) As Date
> >> > Volatile = False
> >> > miFecha = Now
> >> > End Function
> >> > 3. En el libro de Excel tengo:
> >> > 27/09/2008 12544
> >> > 27/09/2008 2563
> >> > 27/09/2008 1256
> >> > 27/09/2008 456
> >> > FALSO
> >> > FALSO
> >> > 4. La fecha que indicaba el libro, en el dia de ayer, era el 26/09/2008 y sin embargo hoy esa fecha esta actualizada a la fecha del dia
> >> > por lo que supongo que manana indicara la fecha de manana y cada dia la que corresponda.
> >> > Que es lo que hago mal?
>
>
>
Respuesta Responder a este mensaje
#8 Servando
28/09/2008 - 21:55 | Informe spam
Hola Julian

He probado a sustituir Worksheet_Change por miPrueba; en este caso el
resultado es:
#¡VALOR! 1



Error, no se puede cambiar el nombre de un evento.
Procedimiento:

Con esta rutina no tienes que poner nada en A, de forma automatica cuando
escribas algo en B pondra la fecha en A

1.Clic derecho sobre el nombre de la etiqueta de la hoja
2. seleccionar "Ver codigo"
3. Pegar el codigo proporcionado (sin cambios) en la hoja que abrira.
- solo puede ser uno u otro, no pueden estar los dos a la vez.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
If Target.Offset(0, -1).Value = "" Then
Target.Offset(0, -1).Value = Date
End If
End If
End Sub


En caso de que no importe si ya contiene algo, (en A) cada modificacion en la
celda de la columna B afectara la celda de la columna A con el siguiente
codigo.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
Target.Offset(0, -1).Value = Date
End If
End Sub

ADVERTENCIA. Nuevamente te repito, que es o una u otra, no pueden estar
ambas y deben estar en la hoja de eventos de la hoja de trabajo. (sigue las
instrucciones del procedimiento).
Saludos
Servando Villalon
Respuesta Responder a este mensaje
#9 Ivan
28/09/2008 - 22:57 | Informe spam
hola Julian,

solo por tantear en tanto vuelven los expertos ¿como guardas el libro?
¿como '.xlsm' (libro habilitado para macros)?

la verdad es que no me pega que tenga algo que ver con el problema
(aparte de que el 2007 ni lo he visto), pero si no es asi prueba a
guardarlo como tal, a ver que pasa

suerte
Ivan
Respuesta Responder a este mensaje
#10 Julián
28/09/2008 - 23:37 | Informe spam
He utilizado la primera opción porque es la que más me interesa para los
libros con los que trabajo. He seguido los pasos que indicas; funciona
perfectamente. Error mío hasta este momento por no haber entendido tu
explicación.
Muchas gracias por tu ayuda.
Saludos,
Julián.


"Servando" escribió:

Hola Julian

> He probado a sustituir Worksheet_Change por miPrueba; en este caso el
> resultado es:
> #¡VALOR! 1

Error, no se puede cambiar el nombre de un evento.
Procedimiento:

Con esta rutina no tienes que poner nada en A, de forma automatica cuando
escribas algo en B pondra la fecha en A

1.Clic derecho sobre el nombre de la etiqueta de la hoja
2. seleccionar "Ver codigo"
3. Pegar el codigo proporcionado (sin cambios) en la hoja que abrira.
- solo puede ser uno u otro, no pueden estar los dos a la vez.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
If Target.Offset(0, -1).Value = "" Then
Target.Offset(0, -1).Value = Date
End If
End If
End Sub


En caso de que no importe si ya contiene algo, (en A) cada modificacion en la
celda de la columna B afectara la celda de la columna A con el siguiente
codigo.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
Target.Offset(0, -1).Value = Date
End If
End Sub

ADVERTENCIA. Nuevamente te repito, que es o una u otra, no pueden estar
ambas y deben estar en la hoja de eventos de la hoja de trabajo. (sigue las
instrucciones del procedimiento).
Saludos
Servando Villalon


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