Página 1 de 1
[RESUELTO] Insertar fecha automáticamente
Publicado: Sab May 23, 2009 2:47 pm
por layug
Hola amigos, mi problema es el siguiente:
He intentado sin resultados positivos que mi hoja de cálculo ingrese automáticamente la fecha del sistema en una columna específica sin que actualice toda la colunma a dicha fecha,es decir,lo que pretendo es que de manera automática OpenOffice ingrese la fecha del sistema en la fila que introduzco datos en la columna a la que definí como fecha.
Re: Insertar fecha automáticamente
Publicado: Dom May 24, 2009 2:16 am
por FJCC-ES
En el foro inglés, Villeroy publicó una macro
http://user.services.openoffice.org/en/ ... 21&t=12575 que inserta la fecha del sistema en columna A cuando se introducen datos en una fila. Es fácil cambiar la macro para insertar la fecha en otra columna.
Código: Seleccionar todo
REM ***** BASIC *****
Sub test_splitStringAddress()
Dim s$,sSh$,sRg$
a=Array("'my sheet'.A1", _
"$'my sheet'.A", _
"'file:///doc.ods'#'my sheet'.A1", _
"$'file:///doc.ods'#$'my sheet'.A")
for i= 0 to uBound(a())
s = a(i)
splitStringAddress(s,sSh,sRg)
print sSh,sRg
next
End Sub
sub splitStringAddress(s$, sSheet$, sRange$)
dim sURL$, linkPos%, sheetPos%
' remove leading $ in any case:
if left(s, 1) = "$" then s = mid(s, 2)
linkPos = instr(s, "'#")
if linkPos > 0 then
sheetPos = instr(linkPos, s, ".")
sURL = left(s, linkPos +1)
sSheet = mid(s, linkPos +2, sheetPos -linkPos -2)
sRange = mid (s, sheetPos +1)
else
sheetPos = instr(s, ".")
if sheetPos > 0 then
sSheet = left(s, sheetPos -1)
sRange = mid (s, sheetPos +1)
else
sRange = s
endif
endif
if left(sSheet, 1) = "$" then sSheet = mid(sSheet, 2)
if (left(sSheet, 1) = "'") and (right(sSheet, 1) = "'") then
sSheet = mid(sSheet, 2, len(sSheet) -2)
endif
sSheet = sURL & sSheet
end sub
'-------usefull helper-function, returning focussed cell
'by UROS > http://www.oooforum.org/forum/viewtopic.phtml?t=19348
REM 2006-08-09: fixed error when row > 8191
' ;sh; ;lSheet +3
'100/60/0;1;tw:309;2/2/0/0/0/0/2/0/0/0/0;253/8191/0/0/0/0/2/246/0/0/8158;0/0/0/0/0/0/2/0/0/0/0
'100/60/0;1;tw:309;2/2/0/0/0/0/2/0/0/0/0;253+8192+0+0+0+0+2+246+0+0+8158;0/0/0/0/0/0/2/0/0/0/0
Function getActiveCell(oView)
Dim as1(), lSheet&,lCol&,lRow$, sDum as String,bErr as Boolean
as1() = Split(oView.ViewData, ";")
lSheet = CLng(as1(1))
sDum = as1(lSheet +3)
as1() = Split(sDum, "/")
on error goto errSlash
lCol = CLng(as1(0))
lRow = CLng(as1(1))
on error goto 0
getActiveCell = oView.Model.getSheets.getByIndex(lSheet).getcellByPosition(lCol,lRow)
exit Function
errSlash:
if NOT(bErr) then
bErr = True
as1() = Split(sDum, "+")
resume
endif
End Function
Sub printStamp(oCell)
'''Put the current time into the active cell.
'No formatting intended. Apply any date/time formatting you like.'''
oCell.setFormula("=NOW()")
oCell.setValue(oCell.getValue())
End Sub
Sub _NowToColumnAByValidation(sAddr, bOverwrite)
Dim s$,r$
iCol = 0
doc = thisComponent
splitStringAddress(sAddr,s,r)
sh = doc.Sheets.getByName(s)
rg = sh.getCellRangeByName(r)
iRow = rg.RangeAddress.StartRow
c = sh.getCellByPosition(iCol, iRow)
if bOverwrite or (len(c.getFormula())=0)then printStamp(c)
End Sub
Sub _NowToTimeStampCell(bOverwrite)
oNames = thisComponent.NamedRanges
oName = oNames.getByName("TimeStamp")
oRg = oName.getReferredCells()
c = oRg.getCellByPosition(0,0)
if bOverwrite or (len(c.getFormula())=0)then printStamp(c)
End Sub
Sub NowToEmptyColumnAByValidation(sFormula, sAddr):
'''Current time to empty column A, triggered by failing validation'''
_NowToColumnAByValidation(sAddr, False)
End Sub
Sub NowToColumnAByValidation(sFormula, sAddr):
'''Current time to column A, triggered by failing validation'''
_NowToColumnAByValidation(sAddr, True)
End Sub
Sub NowToTimeStampCell():
'''Put current time into a cell named "TimeStamp"'''
_NowToTimeStampCell(True)
End Sub
Sub NowToEmptyTimeStampCell():
'''Put current time into an empty cell named "TimeStamp"'''
_NowToTimeStampCell(False)
End Sub
Sub NowToActiveCell():
'''Put current time into the currently active input cell'''
oDoc = thisComponent
oView = oDoc.getCurrentController()
oCell = getActiveCell(oView)
printStamp(oCell)
End Sub
1.Copiar el código al archivo: Seleccione el código y elija Editar → Copiar.
Elija Herramientas → Macros → Organizar Macros → OpenOffice Basic. Escoja el archivo y su biblioteca Standard y haga clic en el botón “Nuevo”. Acepte el nombre Module1 y pegue (Editar → Pegar) el código debajo del texto “End Sub”
2.Cambiar el código: Busque esta sección del código
Código: Seleccionar todo
Sub _NowToColumnAByValidation(sAddr, bOverwrite)
Dim s$,r$
iCol = 0 'Cambie la columna aqui. Columna A=0, B=1, C=2, etc.
doc = thisComponent
splitStringAddress(sAddr,s,r)
sh = doc.Sheets.getByName(s)
rg = sh.getCellRangeByName(r)
iRow = rg.RangeAddress.StartRow
c = sh.getCellByPosition(iCol, iRow)
if bOverwrite or (len(c.getFormula())=0)then printStamp(c)
End Sub
y cambie iCol = 0. El cero significa columna A. Uno significaría Columna B, 2 significaría Columna C, etc.
3.Definir validez del contenido de celdas: Seleccione las celdas que contendrán datos. Elija Datos → Validez. En la pestaña Criterios escoja Permitir=Longitud de texto, Datos=igual, Valor = 0. En la pestaña Mensaje de Error escoja Acción = Macro. Haga clic en el botón “Examinar”. Escoja el archivo, su biblioteca Standard, y Module1. En la lista Nombre de la Macro, escoja “NowToColumnAByValidation”.
Ahora cuando introduzca datos en las celdas que seleccionó en la sección 3, la fecha del sistema aparecerá en la columna que eligió en la sección 2.
Re: Insertar fecha automáticamente
Publicado: Dom May 24, 2009 9:43 pm
por layug
Gracias amigo, es justo lo que buscaba y todo funciona correctamente.
Muchas gracias por tu ayuda.
Re: [Resuelto]Insertar fecha automáticamente
Publicado: Jue Sep 20, 2012 5:08 am
por Gustavo Mattoni
¿no hay una forma de hacerlo sin usar macros? o sea con simples fórmulas tipo..=ahora() y que ésta no cambie automáticamente?
Re: [RESUELTO] Insertar fecha automáticamente
Publicado: Jue Sep 20, 2012 6:13 pm
por SLV-es
No es posible hacerlo sin macros, pues =Ahora() se actualiza cada vez que se recalcula la hoja, o se imprime, o se guarda.
Saludos
Re: [RESUELTO] Insertar fecha automáticamente
Publicado: Jue Sep 20, 2012 7:04 pm
por mauricio
En el ejemplo anexo, en cuanto agregan una clave o el nombre del empleado, inserta la fecha en la columna respectiva...
Saludos
Re: [RESUELTO] Insertar fecha automáticamente
Publicado: Vie Sep 21, 2012 1:18 am
por SLV-es
Ummmm, muy original.
+1
Saludos
Re: [RESUELTO] Insertar fecha automáticamente
Publicado: Vie Sep 21, 2012 12:07 pm
por xiseme
Original y simple (como es preferible)
Ahora bien, ¿como ha hecho Mauricio para que la macro sólo se ejecute al modificar las celdas A2-A20 y C2-C20 y sólo con esas?
Re: [RESUELTO] Insertar fecha automáticamente
Publicado: Vie Sep 21, 2012 4:55 pm
por mauricio
xiseme escribió:Ahora bien, ¿como ha hecho Mauricio para que la macro sólo se ejecute al modificar las celdas A2-A20 y C2-C20 y sólo con esas?
Selecciona cualquier celda de estos rangos y ve a Datos... Validez... ahí esta el secreto... claro, mi amigo FJCC-ES nos lo enseño...
Saludos
Re: [RESUELTO] Insertar fecha automáticamente
Publicado: Vie Sep 21, 2012 6:39 pm
por xiseme
Me estaba volviendo loco, buscando por eventos, formatos ... Cuando lo veas, dale las gracias a FJCC-ES en mi nombre.
A ver si no me olvido de este truco, es como un evento de celda «al cambiar valor».
Gracias también a ti.
Re: [RESUELTO] Insertar fecha automáticamente
Publicado: Vie Sep 21, 2012 7:35 pm
por SLV-es
Y con la ventaja que lo puedes extender, simplemente, con la herramienta brocha para copiar estilos !!!!!
Saludos
Re: [RESUELTO] Insertar fecha automáticamente
Publicado: Mar Ene 19, 2016 3:21 am
por olavarria_l
Holaa te hago una consulta yo tengo en una lista desplegable 3 valores pendiente pasado y terminado, los uso para determinar el estado de las tareas y me gustaria ver como se puede cambiar el macro para que aparesca la fecha cuando en la lista lo pongo como Terminado.
Re: [RESUELTO] Insertar fecha automáticamente
Publicado: Mar Ene 19, 2016 5:15 am
por mauricio
Por favor, no hagas consultas a alguien en particular dado que cualquier te puede responder...
Tu pregunta es diferente del tema tratado y resuelto en este tema, por favor, abre un nuevo tema, de preferencia con un ejemplo lo más explicativo posible, obtendrás mejores respuestas...
Saludos
Re: [RESUELTO] Insertar fecha automáticamente
Publicado: Jue Jun 15, 2017 12:58 am
por deniscapo
Hola mira tiene que ver quiero hacer lo mismo pero con la fecha y la hora en la celda intente hacer lo de arriba pero no me sale me da un error de sintaxsis seguro meti la pata podrias referirme o decirme como desde ya gracias y un abrazo desde Uruguay
Re: [RESUELTO] Insertar fecha automáticamente
Publicado: Jue Jun 15, 2017 3:25 am
por mauricio
Por favor, es importante hacer una búsqueda primero, tu pregunta ya se ha respondido, por acá:
https://forum.openoffice.org/es/forum/v ... fecha+hora
Saludos
Re: [RESUELTO] Insertar fecha automáticamente
Publicado: Jue Ago 10, 2017 10:55 pm
por guillepr
hola, ya sé que está resuelto, pero buscando entre las opciones y enlaces a otros foros que pusisteis, encontré una solución muy sencilla.
Hay que activar la iteración en HERRAMIENTAS-OPCIONES-LIBREOFFICE CALC-CALCULAR, y con esta fórmula:
=IF(B1="";"";IF(A1="";NOW();A1))
Al menos es la que he usado yo y me sirve para que cuando en la celda B1 introduzco algún dato, en la A1 pone automáticamente fecha y hora.
Espero no molestar y que os sirva.