Olá, Pessoal!
Estou tentando no Calc um código para destacar só a linha da célula selecionada, limitada à tabela: A6 a J2400, protegida sem senha e conservando a formatação dessa tabela.
.
Grato pela atenção!
Orlando Souza
Olá, Pessoal!
Estou tentando no Calc um código para destacar só a linha da célula selecionada, limitada à tabela: A6 a J2400, protegida sem senha e conservando a formatação dessa tabela.
.
Grato pela atenção!
Orlando Souza
Seguem códigos para inserir no “Module1”, exclusivo, do Basic (Alt+F11), depois atribuir a ação DestacarEventos na opção Seleção alterada (em Planilha->Eventos de planilha…):
Sub DestacarEventos
DestacarX()
end sub
Sub DestacarX(Optional nClasse, Optional Back As Integer)
Dim Altura
Dim DDestac
Dim ETQ As String
Dim i As Integer
Dim LinhaSel
Dim Largura
Dim oControlador As Object
Dim oCursor As Object
Dim oDib As Object
Dim oDoc As Object
Dim oDP As Object
Dim oSel As Object
Dim pos
Dim shape1 As Object
Dim size
ETQ= "BarraDestacar"
If IsMissing(Back) Then Back = 2
oDoc = ThisComponent
oControlador = oDoc.CurrentController
oSel = oControlador.Selection
If Not (oSel.ImplementationName = "ScCellObj") Then
GoTo Fin
End If
oDP = oSel.getSpreadSheet().getDrawPage()
LinhaSel = oSel.getRangeAddress.StartRow
If IsMissing(nClasse) or nClasse="" Then
oCursor = oSel.getSpreadSheet.createCursorByRange(oSel)
oCursor.gotoEndOfUsedArea( False )
nClasse= Replace(oCursor.AbsoluteName, ".", ".A6:") 'começar na linha 6
End If
DDestac = oControlador.ActiveSheet.getCellRangeByName(nClasse)
If LinhaSel > DDestac.getRangeAddress.EndRow Or LinhaSel < DDestac.getRangeAddress.StartRow Then
For i= (oDP.getCount - 1) To 0 Step -1
oDib = oDP.getByIndex(i)
If oDib.Name = ETQ & "Linha" Then
oDP.Remove(oDib)
End If
Next
GoTo Fin
Else
For i= (oDP.getCount - 1) To 0 Step -1
oDib = oDP.getByIndex(i)
If oDib.Name = ETQ & "Linha" Then
GoTo Seguir
End If
Next
Dim oForma As Object
Dim oTam As New com.sun.star.awt.Size
For i=0 To 1
oTam.Width= 5000 - (4700*i)
oTam.Height= 300 + (4700*i)
oForma = ThisComponent.createInstance("com.sun.star.drawing.RectangleShape")
With oForma
If i=1 Then
.Name = ETQ & "Linha"
End If
.setSize (oTam)
.MoveProtect = True
.LineStyle = com.sun.star.drawing.LineStyle.NONE
.FillColor = RGB( 75,75,75 ) 'cor
.FillTransparence = 85 'transparência em %
.LayerID = Back
.ZOrder = 0
End With
oDP.Add(oForma)
Next
End If
Seguir:
oCursor = DDestac.getSpreadSheet.createCursorByRange(DDestac)
Largura = oCursor.Size.Width
Altura = oCursor.Size.Height
oCursor.gotoEndOfUsedArea(False)
Dim index1 As Integer
For i=0 To oDP.getCount - 1
oDib = oDP.getByIndex(i)
If oDib.Name = ETQ & "Linha" Then
index1 = i
End If
Next
shape1 = oDP.getByIndex(index1)
pos = oSel.Position
size = oSel.Size
size.Width = Largura
pos.X = DDestac.Position.X
shape1.setPosition(pos)
shape1.setSize(size)
pos = oSel.Position
size = oSel.Size
size.Height = Altura
Fin:
Exit Sub
End Sub
Fonte: Fóruns da comunidade Apache OpenOffice (e LibreOffice)
Ps: O destaque na linha aparecerá entre a col A e a última usada.
Ola @Orlando, parabéns pela divulgação, será muito útil.
Mas estou testando em Win10+LibO6.4.5.2 e esta aparecendo esta imagem, mesmo que limpo e salvo volta aparecer.
São várias, ficam sobrepostas.
Oi, @schiavinatto
Eu vou comparar com o arquivo original: ResaltadoDeFilaColumaPruebas,
localizado na origem de Fonte informada no final da minha resposta.
Tudo indica que exclui o comando correspondente, quando tirei o destaque em colunas.
@Orlando, a dimensão da imagem e 5, x 0,3, esta dimensão aparece a partir da linha 64 da macro.
A macro não muda o fundo e sim coloca uma mascara semi transparente por cima, interessante…
Abraço.
@Orlando, de uma olhada na Plan2 e macros Module2.
A macro é só para lançar o numero da linha ativa em A1 e voltar para a célula de origem.
A cor é por validação, com base na célula A1.
É necessário clique duplo.
Ola @Orlando, @Conras, @WBastos
Uma sugestão bem simples, (usando uma pequena Macro, Formatação condicional e uma célula Base) para destacar Linha e Coluna ( ou só linha ou só coluna, alterando a Formatação Condicional)
Um adendo a sugestão acima, 4 opções de uso:
* Linha e Coluna destacada,
* Só a Linha destacada,
* Só a Coluna destacada,
* Só a Célula destacada.
DESTAQUE DE LINHA COLUNA CELULA.ods (13.1 KB)
Segue o código corrigido e com explicações (rem) sobre as linhas de comando:
Option Explicit
Sub ResaltarSeleccion()
Dim oDoc As Object
Dim oControlador As Object
Dim oSel As Object
Dim oRango As Object
Dim oRango1 As Object
Dim oRango2 As Object
Dim oColunaInicio, oColunaFim, oLinhaInicio, oLinhaFim as Long
Dim Coluna, Linha as Long
Dim sPassword as String
oDoc = ThisComponent
oControlador = oDoc.CurrentController
oSel = oControlador.Selection
rem Aqui você irá informar o tamanho da sua tabela. Coluna A = 0, Linha 1 = 0
oColunaInicio = 0
oColunaFim = 9
oLinhaInicio = 5
oLinhaFim = 2399
rem Aqui coloque a senha da planilha
sPassword = ""
If oSel.ImplementationName = "ScCellObj" Then
oRango = oControlador.getVisibleRange
rem Aqui é colocado o número da coluna e da linha selecionada
Coluna = oSel.CellAddress.Column
Linha = oSel.CellAddress.Row
rem Rango1 ativa a formatação para Linha
oRango1 = oSel.SpreadSheet.getCellRangeByPosition( oSel.CellAddress.Column, oLinhaInicio, oSel.CellAddress.Column, oLinhaFim )
rem Rango2 ativa a formatação para Coluna
oRango2 = oSel.SpreadSheet.getCellRangeByPosition( oColunaInicio, oSel.CellAddress.Row, oColunaFim, oSel.CellAddress.Row )
oRango = oSel.SpreadSheet.createCursor()
rem desativa a planilha com a senha
oControlador.getActiveSheet.unprotect(sPassword)
rem Reseta a Formatação
oRango.CellStyle = "Default"
rem Aplica a formatação desde que a célula selecionada esteja dentro do tamanho da tabela indicada
if Coluna >= oColunaInicio and Coluna <= oColunaFim and Linha >= oLinhaInicio and Linha <= oLinhaFim Then
oRango1.CellStyle = "Resaltado"
oRango2.CellStyle = "Resaltado"
End If
rem ativa a planilha com a senha
oControlador.getActiveSheet.protect(sPassword)
End If
End Sub
Para manter a sua formatação, antes de mais nada, precisa criar as formatações no Calc.
Para criar as formatações, faça o seguinte:
1- F11 (Gerenciar Estilos)
2 - Em estilos de Célula, clique com o botão direito na área branca
3 - Clique em Novo ou Modificar o Estilo selecionado
4 - Dê um nome ao estilho (será utilizado na macro), e formate ao seu gosto
@Orlando, para que sua formatação permaneça, como eu havia informado na reposta, você precisa criar um Estilo com a formatação utilizada e vincular à macro (substituir o “Default” pelo estilo criado. Apenas dessa forma a formatação se manterá na sua planilha, destacando a linha.
Oi, @Conras
Refiz o passo-passo na sua resposta e o resultado continua igual à planilha-modelo
que eu anexei no comentário anterior.
Obrigado!
Não sei se é exatamente isto que você precisa, mas vou deixar uma macro que fiz para destacar a linha selecionada. É uma pena que o LO Calc não tenha a opção de adicionar eventos com um clique na célula sem ser via macro, mas depois vou estudar sobre o assunto. Por enquanto tem que dar duplo clique. Teste duplo clique na tabela e fora da tabela para ver como funciona.
Option Explicit
'----------------------------------------
Public oPlan As Object
Public oCel As Object
Public lSel As Integer
'-------------------------------------------------
'Insere o valor da célula selecionada na célula i1
'-------------------------------------------------
Public Sub SelecionaCelula
oPlan = ThisComponent.Sheets(0)
oCel = ThisComponent.getCurrentSelection()
lSel = oCel.getRangeAddress.startRow
oPlan.getCellRangeByName("i1").Value = lSel + 1
End Sub
Em tempo, o restante é com formatação condição com a seguinte condição aplicada a sua tabela:
A fórmula é: $I$1=LINHA()