Pergunte aqui
0

Macro Inserir formula com variável

perguntadas 2018-12-04 15:53:39 +0100

imagem do gravatar de Seiki2000

updated 2018-12-04 16:05:58 +0100

Ola pessoal, Preciso colocar duas variaveis para linha e coluna ao inserir formula em uma celula. Segue a macro abaixo. Se alguem puder me ajudar agradeco.

Sub calculo
Dim oDoc As Object, oPlan as Object, oCelula As Object
oDoc = ThisComponent
lin  = 15
col = 6

while oPlan.GetCellByPosition(4,lin).String<>""
     oCelula = oPlan.GetCellByPosition(col,lin)

     oCelula.FormulaLocal = "SOMA(F16*1)"

' NO LUGAR DE F16 PRECISO COLOCAR UMA VARIAVEL PARA RODAR O LOOP TANTO PARA A LINHA QUANTO PARA A COLUNA. ASSIM DA ERRO : "=SOMA((col,lin)*1)"

Obrigado.

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

2 Respostas

2

respondidas 2018-12-06 23:03:27 +0100

imagem do gravatar de Seiki2000

updated 2018-12-07 00:04:51 +0100

imagem do gravatar de Grafeno

Olá pessoal,consegui a solução para essa questão. Como pode ser a dúvida de outra pessoa segue a macro:

Sub INSERIRFORMULA

oDoc = ThisComponent

oPlan = oDoc.GetSheets().GetByName("Planilha1")

Dim formula as String

lin = 2

while oPlan.GetCellByPosition(1,lin).string <> ""

formula = "=B" & lin + 1 & "*C" & lin + 1  

oPlan.GetCellByPosition(3,lin).setFormula(formula)

lin = lin + 1

wend

End Sub
editar assinalar como ofensivo Excluir Link mais
1

respondidas 2018-12-04 16:18:18 +0100

updated 2018-12-05 00:40:10 +0100

Ola @Seiki2000, coloque a formula em uma célula, na macro copia e cola onde quiser.

Por exemplo na célula A15 tem a fórmula =A14*1 , se uma macro copiar A15 e colar em B15 a formula mudara para =B14*1

Segue arquivo do teste.

A macro foi feita pelo gravador, dando uma limpada, fica assim:

sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "fonte"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
end sub

Uma sugestão após ver o arquivo.

'----------------------------------------------------------------
sub InserirFormula
'----------------------------------------------------------------
'A coluna a esquerda desta célula não pode ter celula em BRANCO  |
'Para funcionar na primeira célula deve-se colocar a FORMULA     | 
'E as abaixo tem que estar vazias                                |
'Clique na célula que colocou a FORMULA e acione esta MACRO      |
'----------------------------------------------------------------
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoDownToEndOfData", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoUpToStartOfDataSel", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
end Sub

.

editar assinalar como ofensivo Excluir Link mais

Comentários

Nao deu certo amigo. Ela copia apenas o valor do resultado.

imagem do gravatar de Seiki2000Seiki2000 ( 2018-12-04 17:29:04 +0100 )editar

Anexei arquivo teste na Resposta acima.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-12-04 19:31:38 +0100 )editar

mais uma vez obrigado. agora é quebrar a cabeça para encaixar isso na minha macro.Esperava algo mais simples com variaveis.

imagem do gravatar de Seiki2000Seiki2000 ( 2018-12-04 20:59:46 +0100 )editar

Vide acima a macro limpa.

Vendo o arquivo, fica mais fácil dar uma sugestão melhor.

Se puder enviar: gilberto@schiavinatto.com

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-12-04 21:14:08 +0100 )editar

obrigado, enviei por email.

imagem do gravatar de Seiki2000Seiki2000 ( 2018-12-04 22:09:51 +0100 )editar
1

Devolvida...

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-12-05 00:40:51 +0100 )editar

Obrigado de novo. Mas ficou inviável colocar ela na minha macro. Ainda preciso dessa variável ou de uma solução que não seja gerada através do gravador de macro.

imagem do gravatar de Seiki2000Seiki2000 ( 2018-12-05 21:15:11 +0100 )editar

Se o arquivo que enviou representa o seu arquivo real, a minha macro substitui a sua na pergunta, não e para juntar ?

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-12-05 21:25:10 +0100 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2018-12-04 15:53:39 +0100

Lidas: 38 vezes

Última atualização: 2 dias atrás