Function que aciona Macro.

perguntadas 2019-05-05 03:07:51 +0200

Estava fazendo uns testes de Function para acionar Macros e deparei com o seguinte problema/erro:

Tenho como ponto inicial as células A3 e B3 e a function TESTE

Function TESTE( a, b )
TESTE = a + b
End Function

OK funcionando =TESTE(A3;B3)

Tenho também esta macro SOMAR, soma A3+B3 na célula C3 ( ela cola a fórmula e converte para numero, isso não é importante é só para teste)

Sub SOMAR
Dim document As Object, 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 = "Plan1.C3"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "StringName"
args3(0).Value =  "=A3+b3"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args3())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
Dim args2(5) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Flags"
args2(0).Value = "SVD"
args2(1).Name = "FormulaCommand"
args2(1).Value = 0
args2(2).Name = "SkipEmptyCells"
args2(2).Value = false
args2(3).Name = "Transpose"
args2(3).Value = false
args2(4).Name = "AsLink"
args2(4).Value = false
args2(5).Name = "MoveMode"
args2(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args2())
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
end Sub

Também funcionando se acionada diretamente.

Mas se inserir a chamada da macro na função:

Function TESTE( a, b )
TESTE = a + b
    SOMAR
End Function

Ao alterar A3 ou B3 gera este erro:

Descrição da imagem

Lembrando que nada esta protegido, alguém saberia dizer o motivo ?

Arquivo do teste.

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

@Gilberto Schiavinatto, parece que a função internamente bloqueia a célula até que a execução chegue no End Function. Por exemplo, teste o código abaixo:

Function TESTE( a, b )
TESTE = a + b
MsgBox "Dê OK para continuar"
End Function

Note que somente depois de dar Ok na msgbox que o valor na célula com a função TESTE() será atualizado, ou seja, fica "bloqueado" até o fim da função.

imagem do gravatar de GrafenoGrafeno ( 2019-05-09 03:09:53 +0200 )editar

Ola @Grafeno, o interessante se a Macro acionada, só enviar o cursor para outra célula, funciona, mas se envolver calculo da o erro acima !

Function XPTO(a,b)
XPTO = a * b
    Call IrPara "B10"
End Function

'================================================|
sub IrPara (xlocal as string)
    '================================================|
Dim document As Object, 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

.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2019-05-09 13:27:48 +0200 )editar

Justamente, no caso, os cálculos com as células estão bloqueados, enquanto outras ações são permitidas.

imagem do gravatar de GrafenoGrafeno ( 2019-05-09 23:40:39 +0200 )editar

Se definiram assim, paciência. Voltei ao inicio......

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2019-05-10 00:36:12 +0200 )editar