|
|
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. |
|
|
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 |
|
|
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 |
|
|
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. |
|
|
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 [..] |
|
|
>>>...¿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 |
|
|
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 |
|
|
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 |
|
|
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 [..] |
|
|
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 |
|
|
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 [..] |
|
|
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 [..] |
|
|
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 |
|
|
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 |
|
|
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 [..] |