Variáveis Private e definição de Variáveis do objeto

Quando é gerado uma macro com o gravador, todo o inicio dela é:

sub MacroQualquer
Dim document As Object
Dim dispatcher As Object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
.
.

Posso colocar fora da macro, servira para todas do módulo

Private document As Object, dispatcher As Object

A duvida é esta parte:

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Tem como definir fora da macro e servir para todas ?


Mas porque quero fazer isto, quando tenho dezenas de submacros, gostaria que elas ficassem o mais enxuta possível.

Boa tarde,

Se fizer isso “fora da macro” vai receber um erro de sintaxe do Basic. Atribuir objetos a variáveis somente é possível dentro dos blocos Sub ... End Sub e Function ... End Function.

Mas você pode iniciar essas variáveis numa macro associada ao evento “Ao abrir o documento”. Sempre o arquivo for aberto, a macro executa e carrega os objetos que ficarão disponíveis para todos os módulos através das suas declarações.

Sub AoAbrirDocumento
   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
End Sub

Ferramentas > Personalizar… > aba Eventos

Atte,

Ola @Geafeno, obrigado, funcionou muito bem.

Ola @Grafeno, aparentemente estava funcionando, as macros que havia testado, ainda estavam com a informação, quando retirei não estão funcionando.

Erro de execução do BASIC.
Variável do objeto não definida.

Ola @Grafeno, achei uma solução que não envolve macros para autoexecutar.

Por exemplo a SubMacro IrPara(),

'================================================|
Sub IrPara (xlocal as string)
'exemplo uso: IrPara "Planilha.A1" ou "Planila1.A1:B3" ou "NomeArea"
'================================================|
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

…continua…

…continuando…

Vou usar esta, alterei para padronizar o nome, o Uno correspondente da ação. E a definição de document e dispatcher, substitui diretamente na macro, e pelo que percebi não preciso definir a instrução Dim…

'================================================|
Sub GoToCell (xlocal as string)
'================================================|
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint" : args1(0).Value = xlocal
createUnoService("com.sun.star.frame.DispatchHelper"). _
executeDispatch(ThisComponent.CurrentController.Frame, ".uno:GoToCell", "", 0, args1())
End Sub

E instalei estas SubMacros em Minhas macros, assim quando preciso ir para alguma célula/área/planilha ou área nomeada, só dou o comando:

GoToCell "Local desejado"

Achei mais prático… estou criando diversos comandos usando esta maneira. Abraço.