Pergunte aqui
0

Como disparar uma macro automaticamente toda vez que a busca de um dado é encontrado numa coluna índice?

perguntadas 2018-05-11 20:26:00 +0200

imagem do gravatar de jolivaljr

updated 2018-05-23 16:37:35 +0200

Tenho uma planilha (P1) que contém uma TABELA PADRAO de Serviços de Engenharia. Ela contém os seguintes colunas (campos): ITEM,DISCRIMINAÇÃO, QTDE, UND, PC UNIT e PC TOTAL. Essa planilha possui 5 mil linhas de serviços. Paralelamente, tenho um segunda planilha (P2) que CONTÉM 3 colunas/campos: ITEM, DIVISOR, DESCRITOR. Essa segunda planilha serve como uma tabela ÍNDICE. Ou seja, iniciando na primeira linha e primeira coluna da P2 tenho um item (comum as duas planilhas) que deve ser buscado na P1. Ao se encontrar em P1 o registro buscado pela P2, inicia-se em P1 uma macro que precisará usar em seu corpo os dados DIVISOR e DESCRITOR da respectiva linha de busca de P2. Assim, resumidamente, desejo aplicar a MACRO em P1 toda vez que a busca dos registros do campo ITEM de P2 for encontrado ao longo no campo ITEM de P1. A itenização é única. Não há itens repetidos. Pensei em usar PROCV e CALL MACRO mas não sei como fazer. Agradeço a ajuda.

Link com um esboço do que preciso :

https://www.dropbox.com/s/qq0c2u2olil...

.

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

Seja bem vindo @jolivaljr, o que exatamente faz a macro ?

Dependendo da necessidade um PROCV + cálculos resolva.

Mostre qual o resultado esperado..

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-05-11 23:01:06 +0200 )editar

Bom dia. Primeiramente agradeço muito o apoio e a sua disponibilidade em responder. Vou tentar explicar melhor. Por favor veja minhas explicações no link a seguir:

https://www.dropbox.com/s/8avelt7gv3d...

Muito obrigado mesmo!

imagem do gravatar de jolivaljrjolivaljr ( 2018-05-14 15:03:41 +0200 )editar

Ola @jolivaljr, poste uma imagem de como deve ficar a P1 da vencedora para a fiscalização. Esta divisão é feita em linhas ou tipo cronograma em colunas ?

Sobre a Macro que já possue, poste ela, fica mais fácil fazer testes.

Por exemplo é gerada uma P3 ?

O DIVISOR tem limite máximo ?

Quando o DIVISOR não for parcelar !! é indicado 1 ?

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-05-14 18:41:45 +0200 )editar

Segue uma imagem extraída da planilha P1 original (primeiros itens). https://www.dropbox.com/s/ejc4wfyv028...

Segue uma imagem extraída da P1 após a execução da macro que divide o item 1.1.1 nos subitens 1.1.1.1 ...1.1.1.30 https://www.dropbox.com/s/7e6tuqd81dx...

Nesse exemplo, não foi gerada uma nova Planilha. A P1 foi sendo alterada pela macro item a item, caso a caso. A P2 seria "o gatilho" a macro rodar sozinha

imagem do gravatar de jolivaljrjolivaljr ( 2018-05-14 20:53:58 +0200 )editar

A sua macro pode ser acionada pela minha do teste ?

Poste a macro para que eu teste com a minha .....

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-05-15 04:54:31 +0200 )editar

Bom dia,

Segue o link para a macro:

https://www.dropbox.com/s/eynazvf882i...

Obrigado novamente!

imagem do gravatar de jolivaljrjolivaljr ( 2018-05-15 15:34:34 +0200 )editar

Bom dia Gilberto.....conseguiu acessar o link?

imagem do gravatar de jolivaljrjolivaljr ( 2018-05-22 16:35:19 +0200 )editar

Ola @jolivaljr, ok consegui sim, desculpe a demora do retorno, Esposa teve que implantar Marca-passo com urgência, tive que dar um tempo para o passatempo de planilhas, mas a onda passou, estou voltando. Rodei a macro aqui, ela é em VBA(Excel) certo, no primeiro item ficou certo, a partir do segundo fica uma sujeira estranha, vide imagem, o seu fica certo ?. imagem

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-05-22 17:41:11 +0200 )editar

Obrigado em responder. Não precisa se desculpar! Espero que tudo tenha melhorado!. Sobre a MACRO, é em VBA(excel) sim. Ela roda bem aqui na planilha original onde tenho que dividir itens (linhas) que necessitam de um maior detalhamento periódico. Quando rodo a macro não fica sujeira não. Creio que pode ser o reposicionamento da ActiveCell. Para cada macro há um reposicionamento da célula ativa para a próxima linha a ser dividida. Por algum motivo parece que isso não está acontecendo contigo.

imagem do gravatar de jolivaljrjolivaljr ( 2018-05-22 19:03:46 +0200 )editar

O fato é que eu tenho que linha a linha decidir se disparo ou não a macro! Queria uma forma de dispará-la baseado na P2 que tem listado os itens que necessitam ser divididos, o texto a ser acrescido na descrição das linhas dividias e o nr de divisões necessárias para aquele item. Com isso, consigo otimizar a execução da macro em toda P1 ou até mesmo em uma nova Planilha (P3....quem sabe!) de uma única vez! Aguardo....obrigado...muito obigado

imagem do gravatar de jolivaljrjolivaljr ( 2018-05-22 19:07:19 +0200 )editar

2 Respostas

0

respondidas 2018-05-12 15:02:31 +0200

updated 2018-05-23 16:40:55 +0200

Olá, não sei exatamente o resultado que quer chegar, esta macro serve de ideia: Arquivo do teste

Sub Comecar
    Call IrPara "ITENS"
    Call TESTANDO
end Sub


'============
Sub TESTANDO
Dim Plan As Object
Dim Var1 As String
Dim oSel As Object
dim document   as object
dim dispatcher as object

    Call IrPara "ÍNDICE"
    Call DeslocarAbaixo 1
' ===== Pegar a variavel Var1, a Pesquisar
    oSel = ThisComponent.getCurrentSelection()
    Var1 = oSel.getString()

'   While Var1 <>""

'TESTE
if Var1 = "" then 
    MsgBox "Nº ITEM em branco", 0, "A t e n ç ã o"
else
' ===== Ir para o Banco de Dados
    Call IrPara "ITENS2"
    Call SelecionarColuna
' ===== Fazer a busca, achar a célula com a informação
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args3(20) as new com.sun.star.beans.PropertyValue
args3(0).Name = "SearchItem.StyleFamily"
args3(0).Value = 2
args3(1).Name = "SearchItem.CellType"
args3(1).Value = 0
args3(2).Name = "SearchItem.RowDirection"
args3(2).Value = true
args3(3).Name = "SearchItem.AllTables"
args3(3).Value = false
args3(4).Name = "SearchItem.SearchFiltered"
args3(4).Value = false
args3(5).Name = "SearchItem.Backward"
args3(5).Value = false
args3(6).Name = "SearchItem.Pattern"
args3(6).Value = false
args3(7).Name = "SearchItem.Content"
args3(7).Value = false
args3(8).Name = "SearchItem.AsianOptions"
args3(8).Value = false
args3(9).Name = "SearchItem.AlgorithmType"
args3(9).Value = 0
args3(10).Name = "SearchItem.SearchFlags"
args3(10).Value = 0
args3(11).Name = "SearchItem.SearchString"
args3(11).Value = Var1 '<=====VARIAVEL
args3(12).Name = "SearchItem.ReplaceString"
args3(12).Value = ""
args3(13).Name = "SearchItem.Locale"
args3(13).Value = 255
args3(14).Name = "SearchItem.ChangedChars"
args3(14).Value = 2
args3(15).Name = "SearchItem.DeletedChars"
args3(15).Value = 2
args3(16).Name = "SearchItem.InsertedChars"
args3(16).Value = 2
args3(17).Name = "SearchItem.TransliterateFlags"
args3(17).Value = 256
args3(18).Name = "SearchItem.Command"
args3(18).Value = 0
args3(19).Name = "SearchItem.SearchFormatted"
args3(19).Value = false
args3(20).Name = "SearchItem.AlgorithmType2"
args3(20).Value = 1
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args3())
dim args4(1) as new com.sun.star.beans.PropertyValue
args4(0).Name = "By"
args4(0).Value = 1
args4(1).Name = "Sel"
args4(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoLeftToStartOfData", "", 0, args4())
'===== Abaixo vai a Chamada da Macro a executar.
' Call MacroExecutar


    Call TESTANDO

end If  

end Sub 


' ============== SUBMACROS ========================================================


Sub MacroExecutar
    'montar rotina da macro
end Sub





'================================================|
sub IrPara (xlocal as string)
'exemplo uso: IrPara "Planilha.A1" ou "Planila1.A1:B3" ou "NomeArea"
'================================================|
Dim document As Object
Dim dispatcher As Object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = xlocal
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
end sub




'================================================|
sub DeslocarAbaixo (xqt As Integer)
' xqt = quantidade de linhas 
' uso: DeslocarAbaixo 3 '3 linhas
'================================================|
Dim document As Object
Dim dispatcher As Object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "By"
args1(0).Value = xqt '<==== quantidade linhas.
args1 ...
(mais)
editar assinalar como ofensivo Excluir Link mais
0

respondidas 2018-05-12 05:28:38 +0200

imagem do gravatar de Beto

updated 2018-05-12 05:29:27 +0200

Penso que estudar um caso parecido vai te ajudar. Use este arquivo para estudar controle de estoque tire a proteção das planilhas, assim poderá visualizar as fórmulas. A senha delas está nas propriedades do documento.

editar assinalar como ofensivo Excluir Link mais
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2018-05-11 20:26:00 +0200

Lidas: 78 vezes

Última atualização: May 23