Redução de tamanho de macro

Tenho esta macro que uso como SubMacro para direcionar o cursor para algum local da planilha, posso usar como paramento A2 ou B3:G5 ou Areanomeada ou Planilha.célula(ou area):

sub GoToCel ( xLocal As Strinng )
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint" : args1(0).Value = xLocal  '<========VARIAVEL
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController.Frame _
, ".uno:GoToCell", "", 0, args1())
end Sub

Mas gostaria de reduzir para algo assim: ( Mas não deu certo )

Sub GoToCel ( xlocal As String )
ThisComponent.CurrentController.select(ThisComponent.getRangeAddresses ( xLocal ))
End Sub

É possível consertar ?

Eu uso assim e funciona:

sub Main
	oDoc = ThisComponent
	oPlanAtiva = oDoc.CurrentController.ActiveSheet
	
	ThisComponent.CurrentController.Select(oPlanAtiva.getCellRangeByName("A5"))
end sub

ou Assim:

sub Main
	oDoc = ThisComponent
	oPlanAtiva = oDoc.CurrentController.ActiveSheet

	oCel_Destino = oPlanAtiva.getCellRangeByName("b3")
	ThisComponent.CurrentController.Select(oCel_Destino)
end sub

Ou Assim, quando muda o foco para outra planilha (aba)

sub Main
	oDoc = ThisComponent
	oPlanAtiva = oDoc.CurrentController.ActiveSheet

	oPlanOutra = oDoc.Sheets.getByName("Planilha2")
	oCel_Destino = oPlanOutra.getCellRangeByName("c7")
	ThisComponent.CurrentController.Select(oCel_Destino)
end sub

Acho que faltou vc definir o objeto planilha

Ola @mrkalvin, estas maneiras eu conheço:

A procura é para substituir a inicial minha,

sub GoToCel ( xLocal As Strinng )
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint" : args1(0).Value = xLocal  '<========VARIAVEL
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController.Frame _
, ".uno:GoToCell", "", 0, args1())
end Sub

A variável na minha posso informar:

Pontual em uma célula A5

uma área A5:C7

uma planilha Planilha1

uma planilha.célula Planilha2.A6

uma planilha.área Planilha2.A6:D7

área nomeada AreaNomeada

Gostaria de usar algo assim: ( mais simples )

Sub GoToCel ( xlocal As String )
ThisComponent.CurrentController.select(ThisComponent.getRangeAddresses ( xLocal ))
End Sub

Onde em xLocal possa usar as opções de endereçamento acima.

Abraço.

Nesse caso acho que deveria fazer assim:

sub GoToCel ( xlocal AS Object )
	ThisComponent.CurrentController.Select(xlocal)
end Sub

sub Main
	oDoc = ThisComponent
	oPlanAtiva = oDoc.CurrentController.ActiveSheet

	oAreaNomeada = oDoc.NamedRanges.getByName("Seu_Nome_Area_Nomeada")
	oCel_Destino = oPlanAtiva.getCellRangeByName("B3")
	oRange_Destino = oPlanAtiva.getCellRangeByName("B3:D10")

	oPlanOutra = oDoc.Sheets.getByName("Planilha3")	
	oCel_Destino_Outro = oPlanOutra.getCellRangeByName("c7")

	GoToCel(oAreaNomeada) 'área nomeada
	GoToCel(oCel_Destino) 'célula pontual na planilha ativa
	GoToCel(oRange_Destino) 'intervalo de celulas na planilha ativa
	GoToCel(oCel_Destino_Outro) 'célula em outra planilha
	
end Sub

mudar o xlocal de string para objeto

A idéia é essa, mas Executando uma macro :

Sub teste2
	GoToCel2 ("B6")
End Sub

Sub GoToCel2 ( xlocal As string )
    ThisComponent.CurrentController.Select( xlocal )
End Sub

Nada acontece, e na sua macro Main, da erro aqui:

oPlanAtiva = oDoc.CurrentController.ActiveSheet

Eu não tinha testado com a área nomeada, agora funcionou, faltou o .ReferredCells

Será que assim é o que vc precisa?

sub GoToCel ( xlocal AS Object )
    ThisComponent.CurrentController.Select(xlocal)
end Sub

sub Main
    oDoc = ThisComponent
    oPlanAtiva = oDoc.CurrentController.ActiveSheet

    oAreaNomeada = oDoc.NamedRanges.getByName("testeArea").ReferredCells

    oCel_Destino = oPlanAtiva.getCellRangeByName("B3")
    oRange_Destino = oPlanAtiva.getCellRangeByName("B3:D10")

    oPlanOutra = oDoc.Sheets.getByName("Planilha2") 
    oCel_Destino_Outro = oPlanOutra.getCellRangeByName("c7")

	'Descomente cada uma das linhas abaixo pra ver como fica em cada situação
    GoToCel(oAreaNomeada) 'área nomeada
    'GoToCel(oCel_Destino) 'célula pontual na planilha ativa
    'GoToCel(oRange_Destino) 'intervalo de celulas na planilha ativa
    'GoToCel(oCel_Destino_Outro) 'célula em outra planilha
end Sub

Arquivo de exemplo:


Só reforçando não pode usar string em “GoToCel” precisa ser um objeto.

não  pode ser apenas string "B6"

tem que ser o objeto todo:

ThisComponent.Sheets.getByName("Planilha1").getCellRangeByName("B6")

Vou continuar com a minha, é mais pratica, uma só serve para tudo.

sub GoToCel ( xLocal As Strinng )
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint" : args1(0).Value = xLocal  '<========VARIAVEL
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController.Frame _
, ".uno:GoToCell", "", 0, args1())
end Sub

Só imaginei que podei ser mais compacta.

Obrigado @mrkalvin.

Essa era uma das minhas grandes dúvidas também, “Como resumir essa bendita função”.
Depois de alguns testes percebi que o “xLocal” não é uma string, mas um objeto (oCel), portanto sempre terá que mostrar o caminho a que ele se refere, senão a função não vai selecionar o range definido na sua macro.
Acrescentei um novo arquivo com a função da imagem -

Option Explicit 
'-----------------------------------------------------     
Public oDoc 	As Object 
Public oPlan 	As Object
Public oCel 	As Object
'-----------------------------------------------------   
Sub PlanInicio	 
	oDoc = ThisComponent
	oPlan = oDoc.Sheets.getByName ("Inicio")
	oCel = oPlan.getCellRangeByName ( "A1:C13" )
	
	GotoCell ( oCel )
End Sub
'-----------------------------------------------------   
Public Function GotoCell (  xLocal As Object ) 
    	ThisComponent.CurrentController.Select(xLocal)
End Function

PlanilhaExemplo - PlanilhaExemplo2

@WBastos, não foi reduzida, só quebrada…

Public Function GotoCell (  xLocal As Object ) 
        ThisComponent.CurrentController.Select(xLocal)
End Function

Tem que fornecer tudo isso:

oDoc = ThisComponent
oPlan = oDoc.Sheets.getByName ("Inicio")
oCel = oPlan.getCellRangeByName ( "A1:C13" )

Encontrei uma maneira de reduzir, mas a forma “padrão” ainda é a mais prática.
Outra opção seria:

Public Function GotoCel ( oPlan$ , oCel$ ) 
	With ThisComponent.CurrentController
		.Select( ThisComponent.Sheets.getByName( oPlan ) _
		.getCellRangeByName( oCel ) )
	End With 
End Function

Lembrando que o GotoCel seria assim:

[...]
     GotoCel ("Inicio" , "A1:D10" )
[...]