Pergunte aqui
0

CreateNames

perguntadas 2017-10-16 15:45:38 +0200

imagem do gravatar de Tandy

updated 2019-03-01 19:05:56 +0200

imagem do gravatar de Schiavinatto

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"
editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

Troque: uno:CreateNames por: uno:AddName

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

imagem do gravatar de SchiavinattoSchiavinatto ( 2017-10-17 00:38:30 +0200 )editar

1 Resposta

1

respondidas 2017-10-17 00:44:24 +0200

imagem do gravatar de Grafeno

updated 2017-10-17 00:45:33 +0200

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.

editar assinalar como ofensivo Excluir Link mais

Comentários

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

imagem do gravatar de TandyTandy ( 2017-10-17 12:22:11 +0200 )editar

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

imagem do gravatar de GrafenoGrafeno ( 2017-10-17 23:23:33 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2017-10-16 15:45:38 +0200

Lidas: 47 vezes

Última atualização: Oct 17 '17