Function que aciona Macro.
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:
Lembrando que nada esta protegido, alguém saberia dizer o motivo ?
@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: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.
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 !
.
Justamente, no caso, os cálculos com as células estão bloqueados, enquanto outras ações são permitidas.
Se definiram assim, paciência. Voltei ao inicio......