[RESUELTO] Insertar fecha automáticamente

Discute sobre la aplicación de hojas de cálculo
Responder
layug
Mensajes: 2
Registrado: Sab May 23, 2009 2:14 pm

[RESUELTO] Insertar fecha automáticamente

Mensaje 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.
Última edición por mauricio el Jue Sep 20, 2012 2:48 pm, editado 3 veces en total.
Razón: Marcar como resuelto
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

Re: Insertar fecha automáticamente

Mensaje 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.
layug
Mensajes: 2
Registrado: Sab May 23, 2009 2:14 pm

Re: Insertar fecha automáticamente

Mensaje por layug »

Gracias amigo, es justo lo que buscaba y todo funciona correctamente.
Muchas gracias por tu ayuda.
Gustavo Mattoni
Mensajes: 7
Registrado: Jue Jun 14, 2012 1:54 pm

Re: [Resuelto]Insertar fecha automáticamente

Mensaje 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?
LibreOffice 3.5.4.2 con windows 7
Avatar de Usuario
SLV-es
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España
Contactar:

Re: [RESUELTO] Insertar fecha automáticamente

Mensaje 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
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: [RESUELTO] Insertar fecha automáticamente

Mensaje por mauricio »

En el ejemplo anexo, en cuanto agregan una clave o el nombre del empleado, inserta la fecha en la columna respectiva...

Saludos
Adjuntos
Sin título 1.ods
(10.96 KiB) Descargado 2089 veces
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
SLV-es
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España
Contactar:

Re: [RESUELTO] Insertar fecha automáticamente

Mensaje por SLV-es »

Ummmm, muy original.

+1

Saludos
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: [RESUELTO] Insertar fecha automáticamente

Mensaje por xiseme »

Original y simple (como es preferible) :mrgreen:

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?
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: [RESUELTO] Insertar fecha automáticamente

Mensaje 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
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
xiseme
Mensajes: 1918
Registrado: Lun Nov 24, 2008 1:13 pm

Re: [RESUELTO] Insertar fecha automáticamente

Mensaje por xiseme »

Me estaba volviendo loco, buscando por eventos, formatos ... Cuando lo veas, dale las gracias a FJCC-ES en mi nombre. :D
A ver si no me olvido de este truco, es como un evento de celda «al cambiar valor».
Gracias también a ti.
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
Avatar de Usuario
SLV-es
Mensajes: 4894
Registrado: Jue Ago 26, 2010 1:25 am
Ubicación: España
Contactar:

Re: [RESUELTO] Insertar fecha automáticamente

Mensaje por SLV-es »

Y con la ventaja que lo puedes extender, simplemente, con la herramienta brocha para copiar estilos !!!!!

Saludos
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
olavarria_l
Mensajes: 7
Registrado: Jue Nov 20, 2014 4:57 pm

Re: [RESUELTO] Insertar fecha automáticamente

Mensaje 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.
winwods 8.1 openoffice 4.1.1
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: [RESUELTO] Insertar fecha automáticamente

Mensaje 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
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
deniscapo
Mensajes: 1
Registrado: Jue Jun 15, 2017 12:45 am

Re: [RESUELTO] Insertar fecha automáticamente

Mensaje 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
OpenOffice 4.0 en Windows XP
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: [RESUELTO] Insertar fecha automáticamente

Mensaje 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
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
guillepr
Mensajes: 5
Registrado: Mié Ago 09, 2017 2:59 pm

Re: [RESUELTO] Insertar fecha automáticamente

Mensaje 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.
libreoffice 5.3.5.2 en windows 10
Responder