Pergunte aqui
0

Como executar uma macro no Calc ao selecionar uma célula de uma área?

perguntadas 2018-12-30 23:49:36 +0200

updated 2019-02-17 17:01:48 +0200

Tenho esta macro ligada em Eventos de planilha: quando é alterada a célula E5 é acionada outra macro. (https://ask.libreoffice.org/pt-br/que...)

Sub SelecaoAlteradaC( oCelula )
    ' Testar se o objeto selecionado é uma célula individual
    If oCelula.ImplementationName <> "ScCellObj" Then Exit Sub
    If Right(oCelula.AbsoluteName,4) = "$E$5" Then
        'Chamar a macro desejada
        Call Macro1 
    End If  
End Sub

Porém necessito de outra que seja uma área, se alterar entre B7 a B27 fosse executada outra macro.

Fiz a alteração abaixo mas ..... não deu certo

Sub SelecaoAlteradaR( oRange )
    ' Testar se o objeto selecionado é uma célula individual
    If oRange.ImplementationName <> "ScCellObj" Then Exit Sub
    If Right(oRange.RangeByName,4) = "$B$7:$B$27" Then
        'Chamar a macro desejada
        Call Macro1 
    End If  
End Sub

O que esta errado ?

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

1

respondidas 2018-12-31 14:56:57 +0200

imagem do gravatar de Grafeno

updated 2018-12-31 14:57:51 +0200

Bom dia,

Não deu certo primeiramente porque não existe uma propriedade RangeByName para o objeto ScCellObj (célula individual) que está dentro da sua variável oRange. Também a função RIGHT() ficou inconsistente com sua alteração. Ela foi definida para extrair uma string com 4 caracteres a partir da direita e que será comparada agora com outra com 10 ($B$7:$B$27) pelo operador "=". Nunca passará no teste, mesmo que existisse a propriedade RangeByName.

O melhor jeito de verificar se uma célula está dentro de um intervalo é usando seu "endereço", mais ou menos, como nesta resposta.

Então, a macro adaptada ficaria:

Sub SelecaoAlterada( oCelula )
    ' Testar se o objeto selecionado é uma célula individual '
    If oCelula.ImplementationName <> "ScCellObj" Then Exit Sub

    ' Endereço da Célula '
    oEnd = oCelula.CellAddress    

    ' Celula no intervalo B7:B27 '
    ' Coluna 1 e linha entre 6 e 26 '
    If oEnd.Column = 1 Then
      If oEnd.Row >= 6 And oEnd.Row <= 26 Then
        ' Chamar a macro desejada '
        Call Macro1 
      End If
    End If
End Sub

Espero ter ajudado.

Ate,

editar assinalar como ofensivo Excluir Link mais

Comentários

Sem dívida alguma @Grafeno, aguardo a publicação do seu livro "LibreOffice BASIC e mais algumas coisas", vai a dica ai para 2019.

Aproveitando muita saúde a ti e familiares, ótimo 2019, 20, 21 ...........

Abraço, Gilberto

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-12-31 16:15:50 +0200 )editar

Obrigado pelas palavras, @Gilberto Schiavinatto. Tudo em dobro para ti e seus familiares.

imagem do gravatar de GrafenoGrafeno ( 2019-01-06 19:58:04 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2018-12-30 23:49:36 +0200

Lidas: 57 vezes

Última atualização: Dec 31 '18