We will be migrating from Ask to Discourse on the first week of August, read the details here

Pergunte aqui
0

Historico automatizado

perguntadas 2021-03-16 17:58:39 +0200

imagem do gravatar de Budasamsara

updated 2021-03-22 13:42:31 +0200

imagem do gravatar de Schiavinatto

Gostaria de criar um histórico automatizado toda vez que eu alterasse o valor de uma célula ele me registrasse quando foi a ultima alteração (apenas data não a hora), apagando o valor anterior (se houver). No resumo apenas preciso saber quando foi a última vez que x célula foi atualizada, mas não é para uma célula específica vai ser varias células em varias linhas e cada celula terá seu valor de última alteração individual, não consegui via fórmula então acho que vai ter que ser no VBA tal como o amigo fez no excel no video abaixo https://www.youtube.com/watch?v=Q__cf... PS não preciso fazer a parte de seleção pois já a faço usando o procv/h preciso apenas do registro de data da última vez que a célula foi alterada. Adicionamelente essa função só deve funcionar em uma planilha especifica e não deve funcionar nas outras então o endereço para acionar a macro de conteudo alterado deve ser especifico a apenas aquela coluna e deve escrever em a data de alteração 3 colunas depois na mesma planilha, demais planilhas não acionarão essa macro.

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

0

respondidas 2021-03-16 18:54:42 +0200

imagem do gravatar de Schiavinatto

updated 2021-03-20 14:35:30 +0200

Ola @Budasamsara, no LibreOffice existe a opção de Registro de Alterações.

Com sua planilha aberta, vá em Editar / Registrar alterações / Registrar.

Há mais opções de uso.

As células que sofre alterações ficam com a borda em vermelho ( não é impresso ).

Descrição da imagem

Complemento

Segue macro sugestão e arquivo do teste

REM  *****  BASIC  *****

Sub ConteudoAlterado( oCelula )
' Macro acionada por Eventos de planilha... , Conteúdo alterado
    ' Testar se o objeto selecionado é uma célula individual '
    If oCelula.ImplementationName <> "ScCellObj" Then Exit Sub

    ' Endereço da Célula '
    oEnd = oCelula.CellAddress    

    ' Celula no intervalo B7:B27 '
    ' Coluna 1 e linha entre 6 e 26 '
    If oEnd.Column = 0 Then   '0 (zero) é coluna A
      If oEnd.Row >= 6 And oEnd.Row <= 26 Then ' Linha Inicial 7 e linha Final 27 /// 0 (zero) é linha 1
        ' exceutar tarefas '
    Execute "GoRight", 9 ' 9 ir para a coluna J
    Execute "InsertCurrentDate" ' Inserir data corrente
    Execute "GoLeft", 9  ' 9 voltar para a coluna A
        ' finalizar tarefas '       
      End If
    End If
End Sub



'=========== SubMacro =============================
Sub Execute ( oQue$, Optional nQtd% )
dim Exec(1) as new com.sun.star.beans.PropertyValue
Exec(0).Name = "By" : Exec(0).Value = nQtd
Exec(1).Name = "Sel" : Exec(1).Value = false
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController _
.Frame, ".uno:" & oQue & "", "", 0, Exec())
End Sub

Fonte: https://ask.libreoffice.org/pt-br/que...

editar assinalar como ofensivo Excluir Link mais

Comentários

ok, obrigado é semelhante ao excel, mas eu gostaria mesmo de deixar esse valor (data) numa célula para tratamento futuro a célula seria por exemplo a célula ao lado ou algumas colunas a frente, mas na mesma linha da célula alterada exemplo: quero que quando uma célula na coluna A por exemplo a A123 seja incluso a data da alteração na célula J123, se eu alterar a A13 seja alterada a célula J13 com o valor da data.

imagem do gravatar de BudasamsaraBudasamsara ( 2021-03-16 19:13:25 +0200 )editar

@Budasamsara, veja Complemento em minha resposta acima.

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-03-20 14:36:45 +0200 )editar

Schiavinatto, muito obrigado eu vi aqui e como preciso em planilhas especificas pelo que entendi é só eu ir acionando a macro em cada planilha que desejo que a macro funcione. Adicionalmente tem como me enviar um link ou documento de onde tem as Sintaxes de todas funções pra que eu possa ir implementando novas macros no futuro? Entendi bem a primeira parte do código (ainda mais com os comentários), apenas a Submacro que tive certa dificuldade, mas vou estudar mais pra ir relembrando. PS: na sua resposta faltou apenas indicar que o evento da planilha conteúdo alterado deve ser vinculado a macro (não pra mim, mas para futuros usuários mais desavisados)

imagem do gravatar de BudasamsaraBudasamsara ( 2021-03-22 12:53:55 +0200 )editar

Aqui tem dezenas de links sobre Basic para consultas e estudos:

https://ask.libreoffice.org/pt-br/que...

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-03-22 13:07:17 +0200 )editar

A SubMacro "Execute" é a base para diversos comandos, em uma macro com diversos comandos que a utilizam fica mais fácil chama-la no procedimento indicando o comando:

Veja a lista que funciona neste comando.

https://www.dropbox.com/s/0pwl04f9e08...

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-03-22 13:38:31 +0200 )editar

Legal, Schiavinatto! Muito obrigado ! Tive um pequeno problema quando fui finalizar a planilha o gotoright / gotoleft, eu tinha imaginado que ele era interno e buscava a localização da célula por movimentação interna, mas ao ocultar a coluna de endereço percebi que ele é apenas um movimento de usuário que nesse caso ele pula as colunas ocultas e vai para as células que estão exibidas a correção se daria com um goto com referencia da linha atual certo e colunas travadas certo? Não sei se a solução seria essa ..

imagem do gravatar de BudasamsaraBudasamsara ( 2021-03-22 20:47:28 +0200 )editar

Hummmm, o comando mencionado "gotoright / gotoleft" seriam GoRight e GoLeft estes comandos descolam o cursor/célula ativa, N colunas para a direita e esquerda, e considera as colunas ocultas.

Não entendi direito "ocultar a coluna de endereço"

Entre em contato direto, veja aqui: https://wiki.documentfoundation.org/U...

e me envie um arquivo exemplo, com detalhes de sua necessidade. Sigilo garantido.

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-03-22 23:55:38 +0200 )editar

vou ver mas basicamente a coluna onde ele vai escrever esta oculta (a opção ocultar/ mostrar coluna quando você clica com o botão direito sobre a coluna e oculta apenas para deixar de exibir) fazendo isso a macro não escreve nessa célula ela escreve na próxima célula (a direita) nesse caso se o comando vai para a coluna 10 mas ela esta oculta ele escreve na coluna 11.

imagem do gravatar de BudasamsaraBudasamsara ( 2021-03-23 11:28:46 +0200 )editar

Schavinatto não sei como enviar o arquivo, mas é simples abra o arquivo que me enviou de teste oculte a coluna J (clique com o botão direito na coluna J e mande ocultar) e ele vai escrever na coluna K detalhe na hora de voltar ele vai contar "certo" tbm e o cursor vai voltar pra coluna B ao invés da A porque vc escreveu na K ao invés da J, faça o teste. Eu ate consegui com a seguinte adaptação, mas se tiver algo mais elegante por favor compartilhe...

    REM  *****  BASIC  *****

    Sub ConteudoAlterado( oCelula )
    ' Macro acionada por Eventos de planilha... , Conteúdo alterado
        ' Testar se o objeto selecionado é uma célula individual '
        If oCelula.ImplementationName <> "ScCellObj" Then Exit Sub

    ' Endereço da Célula '
    oEnd = oCelula.CellAddress    

    ' Celula no intervalo B7:B27 '
    ' Coluna 1 e linha entre 6 e 26 '
    If oEnd.Column = 0 Then   '0 (zero) é coluna A
      If ...
(plus)
imagem do gravatar de BudasamsaraBudasamsara ( 2021-03-23 11:40:59 +0200 )editar

Ok @Budasamsara, o procedimento esta certo, em:

Execute "GoLeft", 9  ' 9 voltar para a coluna A ( Esta retornando para B )

Altere para Execute "GoLeft", 10 ' 10 voltar para a coluna A

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-03-23 12:32:06 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2021-03-16 17:58:39 +0200

Lidas: 55 vezes

Última atualização: Mar 20