Pergunte aqui
1

Alteracao de valor de celulas macros

perguntadas 2021-04-13 13:21:18 +0200

imagem do gravatar de Budasamsara

updated 2021-04-14 17:37:34 +0200

Ola bom dia! Preciso executar uma macro que seja acionada caso eu altere qualquer linha da coluna X ele modifique executara uma macro na mesma linha, mas em outra coluna. Eh continuacao de um topico existente, pois tive alguns problemas durante uma das execucoes.

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

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

O que acontece eh que no inicio do teste ele verifica se eh uma celula individual, mas se eu por exemplo quiser alterar varios valores de uma vez na coluna 6 por exemplo com o Control V alterando as linhas 11, 12 e 13 a macro nao eh acionada por causa do teste inicialC:\fakepath\arquivo teste.ods

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

Ola @Budasamsara, a macro foi feita para a cada alteração (célula) ser acionada, linha a linha.

Mesmo que desabilite o IF da conferencia se célula individual, não vai funcionar.

Será necessário reescrever a Macro para que funcione com mais de uma linha.

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-04-13 16:57:44 +0200 )editar

tem alguma ideia de como fazer : pq na realidade essa macro esta funcionando sobre o objeto selecionado e eu preciso startar a macro caso o valor da coluna seja alterado (a macro vai escrever na mesma linha tal como essa, mas devera alterar todo e qualquer valor que for alterado independentemente de onde o cursor estiver). pensei em fazer um comparativo onde eu atribuiria o valor antigo da célula e depois compararia com o novo se fosse diferente eu chamaria a macro, mas seria muito extenso porque seriam várias linhas, a outra alternativa seria copiar a coluna em questão para outra coluna e toda vez que a copia nao fosse igual a original a macro se acionaria nas linhas que o valor estivesse diferente, mas tbm não sei se tem como fazer.

imagem do gravatar de BudasamsaraBudasamsara ( 2021-04-14 00:36:55 +0200 )editar

Poste um arquivo modelo, com informação de qual coluna vai ser alterada manual e onde deve ser preenchido e com o que (formula) ?

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-04-14 02:01:29 +0200 )editar

como anexo um arquivo:

imagem do gravatar de BudasamsaraBudasamsara ( 2021-04-14 17:11:31 +0200 )editar

Use Editar sua pergunta e com o ícone clipe use para anexar.

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-04-14 17:29:38 +0200 )editar

eu vi ele agora ele so aparece na resposta ou no topico original e nao nos comentarios por isso nao estava encontrando, ele esta la em cima no topico original no fim.

imagem do gravatar de BudasamsaraBudasamsara ( 2021-04-14 17:37:02 +0200 )editar

Entendi que, quer colar a informação na coluna H em varias linhas sucessivas e quer a data da coluna J alterada para a data atual, nestas mesmas linhas, é isso ?

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-04-14 18:17:47 +0200 )editar

isso quando eu for colar eu vou colar varias linhas com nomes, RGs, Cpf e etc, mas só quero que ele atualize a data caso a celula da coluna J da mesma linha for alterada se não não (caso eu cole algum valor igual ao existente não tem problema ele atualizar a data, na verdade isso seria o mais ideal), pq na verdade a minha entrada nessa planilha sera com essas linhas que possuem varias colunas, mas a atualização da data so ira acontecer se eu alterar a J.

imagem do gravatar de BudasamsaraBudasamsara ( 2021-04-14 18:35:27 +0200 )editar

A coisa ficou complexa, saiu do meu nível de conhecimento.

Mas para o arquivo não ficar parado, após a colagem de varias colunas ( e linhas ), para forçar a alteração da data e só redigitar os valores da coluna H.

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-04-14 21:08:31 +0200 )editar

é então, mas nesse caso da planilha é um exemplo na realidade vai haver muitas linhas pra se colar de uma só vez totalizando mais de 3000 mil entradas, por isso estava vendo se eu conseguiria ativar uma macro a partir do valor de célula alterada.

Uma outra solução que pensei seria disparar a macro a partir de uma célula alterada (cursor) em qualquer linha dentro da Area (Coluna A ate a H) copiar toda a coluna H para um outro lugar e comparar o antigo valor de H (copiado) com o novo e so executar o comando ( inserir data atual) onde os valores divergirem, mas essa seria a solução menos elegante so pro caso de não haver mesmo um ''gatilho'' de macro para o valor alterado com range.

imagem do gravatar de BudasamsaraBudasamsara ( 2021-04-15 02:04:06 +0200 )editar

1 Resposta

0

respondidas 2021-04-16 15:22:37 +0200

imagem do gravatar de Schiavinatto

updated 2021-04-16 15:24:18 +0200

Segue uma sugestão, se colagem for sempre no final da lista.

Após a colagem, deve-se ativar a primeira célula da coluna H, da linha há ser datada, e acionar o Botão [ DATAR ].

A macro percorre a coluna até encontra uma célula em branco para parar.

Arquivo teste.

editar assinalar como ofensivo Excluir Link mais

Comentários

Schiavinatto tem como eu mover o cursor com limite na área selecionada via macro? Exemplo seleciono a área A1:B13 e mando a macro executar o movimento do cursor dentro dessa área para o limite superior (topo) e depois o limite inferior da seleção? Vi alguns exemplos no fórum que da pra se mover ao que parece, não sei o cursor move, mas a ideia é trabalhar com as informações do thiscomponet.getcurrentselection() o cursor vai ate o limite supeiror da seleção coloca o valor da activecell.row em uma variável, vai ate o limite inferior da seleção e coloca novamente o activecell.row em outra variável e com isso faria o laço.

imagem do gravatar de BudasamsaraBudasamsara ( 2021-04-16 19:11:29 +0200 )editar

Esse procedimento não sei como fazer.Viu a macro que postei acima, ela reconhece a área ( ex: $Plan1.$D$4:$F$8 ), porem não sei como retirar a informação da numeração da linha superior(4) e inferior(8).

imagem do gravatar de SchiavinattoSchiavinatto ( 2021-04-16 19:23:09 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2021-04-13 13:21:18 +0200

Lidas: 33 vezes

Última atualização: Apr 16