obligada > microsoft.* > microsoft.excel

YoMismo (31-01-2008, 23:07)
Estimad@s forer@s,

Tengo una hoja en la cual si la columna d es igual a SI, en la columna c me pone =hoy(). El problema es que necesito que esas fechas una vez guardado el archivo y al abrirlo otro día no se actualicen. Imagino que habrá una función que pueda pasarlas a texto o algo así. En fin, sé que me he explicado fatal, haber si me podéis echar un cable.

Gracias.
Ivan (01-02-2008, 03:00)
hola,

>>>.....si la columna d es igual a SI, en la columna c me pone =hoy(). El problema es que necesito que esas fechas una vez guardado el archivo y al abrirlo otro día no se actualicen. Imagino que habrá una función que pueda pasarlas a texto o algo así....<<<<


¿has probado con la propia funcion 'Texto'?. Este seria un ejmplo de
uso =>

=SI(A1="";"";TEXTO(HOY();"dd mmmm aa"))

espero te ayude

un saludo
Ivan
Ivan (01-02-2008, 03:07)
disculpame, en este caso seguiria actualizandose.

Supongo que habra formas sin VBA (entre ellas copiar y pegar solo
formatos y valores) pero no sabria decirte

siento no ser de gran ayuda

un saludo
Ivan
Héctor Miguel (01-02-2008, 07:12)
hola, (...) ?

> ... si la columna d es igual a SI, en la columna c me pone =hoy().
> El problema es que necesito que esas fechas una vez guardado el archivo y al abrirlo otro dia no se actualicen.
> Imagino que habra una funcion que pueda pasarlas a texto o algo asi.
> En fin, se que me he explicado fatal, haber si me podeis echar un cable.


=hoy() es de las funciones volatiles que se actualizan en cada re/calculo de la aplicacion (aunque esto ya lo notaste) :))
mientras necesites condicionar la fecha por funciones como =si(...) me temo que no podras escapar a su volatilidad :(
una alternativa es usar codigo para dejar/modificar/eliminar/... la fecha segun cambios en determinadas celdas...
otra es que en lugar de condicionar por =si(...) uses los atajos de teclado para dejar fecha/hora "estaticas" (no volatiles)
solo que "esto" deberas hacerlo a mano en la celda donde necesites la fecha -???-

la fecha -> ctrl + punto_y_coma
la hora -> ctrl + dos_puntos

(probablemente deberas pulsar la tecla shift/mayusc en conjunto) -?-

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
YoMismo (01-02-2008, 17:53)
Héctor ¿hay forma de que "ctrl + punto_y_coma" sea una macro? si esto fuera
posible, ¿puedo hacer una función =si(condición;ejecutar_macro;caso
contrario)?

Saludos
"Héctor Miguel" <NOhemiordiSPAM> escribió en el mensaje de
noticias news:5348
[..]
Ivan (01-02-2008, 19:24)
>>>...¿hay forma de que "ctrl + punto_y_coma" sea una macro? si esto fuera
> posible, ¿puedo hacer una función =si(condición;ejecutar_macro;caso
> contrario)?...<<<


¿quiza algo asi?

Public Function FechaSi( _
Optional Condicion As Variant = "", _
Optional SiCumple As Variant = "", _
Optional SiNoCumple As Variant = "", _
Optional Formato As String = "dd/mmm/yy hh:mm:ss" _
) As Variant
If SiCumple = "" Then SiCumple = Format(Now, Formato)
If Condicion = "" Or Condicion = True Then _
FechaSi = SiCumple Else FechaSi = SiNoCumple
End Function

un saludo
Ivan
Ivan (01-02-2008, 19:37)
o quizas mejor asi

Public Function FechaSi( _
Optional Condicion As Variant = "", _
Optional SiCumple As Variant = "", _
Optional SiNoCumple As Variant = "", _
Optional Formato As String = "dd/mmm/yy" _
) As Variant
If SiCumple = "" Then
SiCumple = Format(Now, Formato)
ElseIf IsDate(SiCumple) Then
SiCumple = Format(CLng(CDate(SiCumple)), Formato)
End If
If Condicion = "" Or Condicion = True Then _
FechaSi = SiCumple Else FechaSi = SiNoCumple
End Function
Ivan (01-02-2008, 22:08)
y como (en mi caso) no suele haber 2 sin 3, esta es un poco mas
completa

Public Function FechaSi( _
Optional Condicion As Variant = "", _
Optional SiCumple As Variant = "", _
Optional SiNoCumple As Variant = "", _
Optional Formato As String = "dd/mmm/yy hh:mm:ss" _
) As Variant
If SiCumple = "" Then
SiCumple = Format(Now, Formato)
ElseIf IsDate(SiCumple) Then
SiCumple = Format(CLng(CDate(SiCumple)), Formato)
End If
If IsDate(SiNoCumple) Then SiNoCumple = _
Format(CLng(CDate(SiNoCumple)), Formato)
If Condicion = "" Or Condicion = True Then _
FechaSi = SiCumple Else FechaSi = SiNoCumple
End Function
YoMismo (01-02-2008, 22:18)
El caso Ivan es que en VB estoy un poco pez, la veras que intento ir
aprendiendo pero....., no sé muy bien si hay que meterlo en modulo o en
hoja1, etc. Podrías enviar el archivo y por un lado tengo la solución a mi
problema y por otro lado lo comprendo.

Gracias.
"Ivan" <lomboc> escribió en el mensaje de noticias
news:6717
[..]
Ivan (01-02-2008, 22:51)
hola

>>>si hay que meterlo en modulo o en hoja1, etc. <<<


pegalo en un modulo 'normal' (estando en el editor de VBa ve al menu
Insertar => elige 'Modulo' a secas (o Standard, Normal, etc, pero NO
de clase) => en la vntana que se te abre pega el codigo.

pero mejor pega este otro, que evita acciones inncesarias

'----- en un modulo normal pega desde aqui-----------------
'
Public Function FechaSi( _
Optional Condicion As Variant = "", _
Optional SiCumple As Variant = "", _
Optional SiNoCumple As Variant = "", _
Optional Formato As String = "dd/mmm/yy" _
) As Variant
If Condicion = "" Or Condicion = True Then
If SiCumple = "" Then
SiCumple = Format(Now, Formato)
ElseIf IsDate(SiCumple) Then
SiCumple = Format(CLng(CDate(SiCumple)), Formato)
End If
FechaSi = SiCumple
Else
If IsDate(SiNoCumple) Then SiNoCumple = _
Format(CLng(CDate(SiNoCumple)), Formato)
FechaSi = SiNoCumple
End If
End Function
'----------------------pega hasta aqui --------------------------

pudes usarla tanto en la hoja omo en codigo. Algunos ejs. de uso en
hoja podrian ser (los ej. irian en una celda que no sea la que se
incluya en la formula, en caso de haberla)=>

1) para poner la fecha actual (no se actualiza) a secas con el formato
predeterminado en la funcion (dd/mmm/yy) el cual podrias cambiar n el
mismo codigo por l que utilices habitualmnte =>

=FechaSi()

2) lo mismo pero con el formato '1 de enero del 2000'

=FechaSi(;;;"d "&"""de"""&" mmmm "&"""del"""&" yyyy")

3) poner la fecha actual si en la celda A1 pone 'Hola'

=FechaSi(A1="Hola")

4) poner la fecha actual si en la celda A1 pone 'Hola' y si no poner
la del 1/01/2000

=FechaSi(A1="Hola";:"1/1/2000")

5) poner "Adios" si en la celda A1 pone 'Hola' y si no poner la fecha
actual

=fechasi(B1="Hola";"Adios";TEXTO(AHORA();"dd/mm/aa");"d "&"""de"""&"
mmmm "&"""del"""&" yyyy")

.....son solo algunos ejemplos. Todas debn ir en una sola linea. y no
se atualizan salvo si cambias la condicion, n su caso

espero te ayude

un saludo
Ivan
YoMismo (01-02-2008, 23:25)
Si Sr. perfecto. He hecho las pruebas cambiando la fecha del ordenador y va
de maravilla, mil gracias.

Ahora lo único que ando (teniendo el original a buen recaudo) es para que
cumpla el poner la fecha cuando la columna tenga el texto "si". Espero
aprender de tu ayuda. Repito, gracias.

Saludos
"Ivan" <lomboc> escribió en el mensaje de noticias
news:82c5
[..]
YoMismo (01-02-2008, 23:41)
He hecho este minúsculo cambio:
Public Function FechaSi( _
Optional Condicion As Variant = "", _
Optional SiCumple As Variant = "", _
Optional SiNoCumple As Variant = "", _
Optional Formato As String = "dd/mmm/yy" _
) As Variant
If Condicion = "si" Or Condicion = True Then
If SiCumple = "" Then
SiCumple = Format(Now, Formato)
ElseIf IsDate(SiCumple) Then
SiCumple = Format(CLng(CDate(SiCumple)), Formato)
End If
FechaSi = SiCumple
Else
If IsDate(SiNoCumple) Then SiNoCumple = _
Format(CLng(CDate(SiNoCumple)), Formato)
FechaSi = SiNoCumple
End If
End Function
Es correcto así?
"YoMismo" <QuieroSaber> escribió en el mensaje de noticias
news:1132
[..]
Ivan (02-02-2008, 01:25)
hola,

> >>>> Ahora lo único que ando ...es para que

> > cumpla el poner la fecha cuando la columna tenga el texto "si". <<<<


> Public Function FechaSi( _
>   Optional Condicion As Variant = "", _
>.......
>   If Condicion = "si" Or Condicion = True Then
>.....
>    


la verdad es que, mas que si es correcto (que no tiene porque no
serlo) [creo que] la pregunta deberia ser ¿es practico? o ¿es mejor?

aunque la rspuesta final dependera de lo que realmente busques, en mi
opinion creo que no =>

ten en cuenta que la condicion 'si' se la puedes pasar en el 1er
argumento a la funcion +/- asi=>

=FechaSi(A1="Si")

si esta formula la pusieras en (pj) B1 y la arrastraras hacia abajo
hasta donde te hiciera falta, cada vez que te pusiera 'Si' en la
columna A, te pondria en su vecina de B la fecha actual y si pusiera
cualquier otra cosa (o nada) te la dejaria vacia

para tenerlo mas claro, si quieres olvidate por un momento de que es
una funcion personalizada e imaginate que fuese una funcion integrada
de excel =>

¿como trabajarias con ella?

te describo los argumentos y su uso y razon de ser

Argumentos:

NOTA:
todos son opcionales. El motivo es que si se omiten todos se pude
utilizar como un equivalente de la funcion integrada Hoy() pero sin
actualizarse cada vez que haya un recalculo o se abra el libro. Su
sintaxis seria simplemente =>

FechaSi()

a) Condicion => evidentemente es lo que se tiene que cumplir para que
se obtenga uno u otro resultado.

Es de tipo variant y no boolean, precisamente por lo comentado en la
nota anterior, para poder asignarle una cadena vacia como valor
predetrminado en caso de omision, y dejar los valores verdadero/falso
para aplicarlos igual que en la funcion 'Si'.

.-> en caso de ser el unico argumento explicito, es decir que se
omitan el resto, devolvera la fecha actual solo si se cumple la
condicion. Pej. tu ej. =>

=FechaSi(A1="Si")

.-> si se omite, pero no se omite el siguiente argumento (SiCumple)
devolveria lo que se le pase a este 2º argumento. [aqui la verdad es
que se podria matizar mas para si se omite el 2º pero no el 3º que fus
el valor de este, pero no creo que tenga demasiado sentido)

b) SiCumple => valor devuelto si la condicion es verdadero. Si se
omite devuelve la fecha atual.

se puede pasar cualquir tipo de dato: desde una fecha hasta una celda

.->est ej. devolveria el contenido de la celda 'C1' si la condicion es
verdadero (si A1 s igual a 'SI')

=FechaSi(A1="Si";C1)

c) SiNoCumple => valor devuelto si la condicion es falsa. Si se omite
devuelve la fecha atual.

se puede pasar cualquir tipo de dato: desde una fecha hasta una celda

.->est ej. devolveria el contenido de la celda 'C1' si la condicion es
falsa (si A1 es diferente de 'SI').

=FechaSi(A1="Si";;C1)

fijate en que en la anterior formula, al haber omitido el 2º
argumento, en caso de que fuese verdadero te devolveria la fecha
actual

si quisieses que en caso de ser verdadero te devolviese otra cosa, por
ej. la palabra 'Ok', podrias hacerlo asi =>

=FechaSi(A1="Si";"Ok";C1)

d) Formato => por ultimo este argumento simplemente te pemite
asignarle un formato a la fecha dvuelta.

si se omite te devuelve las fechas con el formato "dd/mmm/yy"

este formato si lo podrias adaptar en el propio codigo, por si sueles
usar uno concreto que ese fuese el predetrminado y poder omitirlo
normalmente. Para ello cambia en esta parte =>

Optional Formato As String = "dd/mmm/yy"

el -> "dd/mmm/yy" por el que mas te interese

puede ir como argumento unico, omitiendo el resto, en cuyo caso te
devolveria la fecha actual pero con el formato espcificado

OJO: aunque en las formulas de hoja normales y en los formatos uses
'a' para especificar el formato de año, en este argumento debes
pasarslo siempre como 'y', pudiendo darse el caso de tener que usar
ambas formas en la misma formula, como en uno de los ej. del mensaje
anterior =>

=FechaSi(B1="Hola";"Adios";TEXTO(AHORA();"dd/mm/aa");"d "&"""de"""&"
mmmm "&"""del"""&" yyyy")

bueno, espo te aclare algo
Ivan (02-02-2008, 01:51)
disulpa. pero aqui

> c) SiNoCumple => valor devuelto si la condicion es falsa. Si se omite
> devuelve la fecha atual.


se me ha ido la mano. En realidad si se omite devuelve una cadena
vacia("")

y OJO. si, tanto en este argumento, como en el anterior le pasases una
funcion tipo Ahora(), Hoy(), etc [como en el ultimo ej. del mensaje
anterior] esta si se actualizaria

un saludo y disulpas a todos por la ristra de mensajes
Ivan
YoMismo (02-02-2008, 16:25)
Ahora está perfecto Iván, he probado y está Ok lo que me comentas
=FechaSi(a1="si") y va cojonudo.

Esta ristra de mensajes, han conseguido lo primero ayuda y lo segundo
enseñar, así que bien está la ristra.

Mil Gracias.

"Ivan" <lomboc> escribió en el mensaje de noticias
news:1743
[..]

Temas Similares