CreateNames

Bom dia!
Preciso saber qual código no Basic utilizo para criar um intervalo nomeado. Tentei gravar uma macro fazendo isso de várias formas mas não aparece o código na macro e nem faz a gravação depois que executo a macro. Preciso do código pois irei personalizar essa função.

Meu intuito é criar um botão que faça várias nomeações de intervalos com determinados critérios em um loop.

Segue abaixo o código desse loop no excel, estou tentando passar para o libre mas não estou conseguindo:

"Private Sub CommandButton1_Click()

Dim n As Long
Dim i As Long
Dim m As Long
Dim linha As String
Dim linhai As String
Dim linham As String
Dim intervaloinicial As String
Dim intervalofinal As String
Dim intervalo As String

i = 1
n = 2
m = 3
linha = "I" & n
linham = "I" & m

While Not IsEmpty(Range(linham).Value)

While Sheets("CORES E TAMANHO LUPO").Range(linha).Value = Sheets("CORES E TAMANHO LUPO").Range(linham).Value

linha = "I" & n
linhai = "I" & i
linham = "I" & m
    
    If Sheets("CORES E TAMANHO LUPO").Range(linhai).Value <> Sheets("CORES E TAMANHO LUPO").Range(linha).Value Then
    intervaloinicial = "J" & n
    End If
    If Sheets("CORES E TAMANHO LUPO").Range(linha).Value <> Sheets("CORES E TAMANHO LUPO").Range(linham).Value Then
    intervalofinal = "J" & n
    End If

n = n + 1
i = i + 1
m = m + 1

Wend

intervalo = intervaloinicial & ":" & intervalofinal
ActiveWorkbook.Names.Add Name:=Sheets("CORES E TAMANHO LUPO").Range(linha).Value, RefersToR1C1:=intervalo
ActiveWorkbook.Names(Sheets("CORES E TAMANHO LUPO").Range(linha).Value).Comment = ""

linha = "I" & n
linham = "I" & m

Wend

End Sub"

.

Passei o a tarde tentando e conseguir chegar a isso, mas falta inserir o nome do intervalo direto, coisa que não estou conseguindo:

 "sub Main
 rem ----------------------------------------------------------------------
 rem define variables
 dim document   as object
 dim dispatcher as object
 dim intervalo as String
 dim x as Long
 dim y as Long
 rem ----------------------------------------------------------------------
 rem get access to the document
 document   = ThisComponent.CurrentController.Frame
 dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
 x = 2
 y = 5
 intervalo = "$J$" & x & ":$J$" & y
 
 rem ----------------------------------------------------------------------
 dim args1(0) as new com.sun.star.beans.PropertyValue
 args1(0).Name = "ToPoint"
 args1(0).Value = intervalo
 
 dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
 
 rem ----------------------------------------------------------------------
 dispatcher.executeDispatch(document, ".uno:CreateNames", "", 0, Array())

 end sub"

Troque: uno:CreateNames
por: uno:AddName

mas só gravou a chamada, os dados preenchidos não grava…

Boa noite,

Dê uma olhada no código abaixo:

Sub Main
   oDoc = ThisComponent
   oTodos = oDoc.NamedRanges 'Todos os intervalos nomeados'
   oPlan = oDoc.Sheets.getByName("CORES E TAMANHO LUPO")
   
   x = 2
   y = 5
   sNome = "testeIntervalo" 'Nome do intervalo'
   oCelBase = oPlan.getCellRangeByName( "$J$" & x ).CellAddress 'Célula referência do intervalo'
   sIntervalo = oPlan.getCellRangeByName( "$J$" & x & ":$J$" & y ).AbsoluteName 'Nome absoluto do intervalo'

   ' Verificar se o intervalo já existe'
   If Not oTodos.hasByName( sNome )  then
     ' Inserir o intervalo nomeado'
     oTodos.addNewByName( sNome, sIntervalo, oCelBase, 0 )
   Else
     ' Modificar o intervalo já existente'
     oTodos.getByName( sNome ).setContent( sIntervalo )
   End If
End Sub

Atte.

Muito obrigado!!! Consegui fazer o loop para nomear vários intervalos automaticamente com um botão.

Maravilha, @Tandy! Só não deixe de marcar a resposta como correta, clicando no , para mantermos os Ask organizado.