Tag Archives: Worksheet

VBA – Marcador de Linha e Coluna no Excel

Dica dada pelo colega Felipe Dasi no nosso fórum.

O código adiciona uma referência na navegação do usuário na planilha, destacando toda linha e coluna. O Excel já faz isso por padrão, mas de uma maneira bem discreta.

'MARCADOR DE LINHA COM COLUNA
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 
    Dim LinhaInicio As Range
    Dim ColunaAtual As Range
    Dim MinhaLinha As Range
    Dim Linha As Long
    Dim Coluna As Long
 
    'ESTABELECE QUE AS CELULAS SERÃO COLORIDAS.
    Cells.Interior.ColorIndex = xlNone
 
    Linha = Target.Row
    Coluna = Target.Column
    'CELULA ONDE SE INICIA A LINHA COLORIDA SEMPRE NA COLUNA A
    Set LinhaInicio = Range("A" & Linha, Target)
    'PEGA A COLUNA ONDE ESTÁ (INTERSECÇÃO ENTRE LINHA E COLUNA)
    Set ColunaAtual = Range(Cells(1, Coluna), Target)
    'FOCA A INTERSECÇÃO.
    Set MinhaLinha = Union(LinhaInicio, ColunaAtual)
 
    'COR QUE QUER USAR, NO CASO A 3 É VERMELHA
    MinhaLinha.Interior.ColorIndex = 3
 
End Sub

Para ver o código em funcionamento, dê uma olhada no vídeo abaixo:

O tópico do fórum que tratou do assunto pode ser visto no link abaixo:

http://www.tomasvasquez.com.br/forum/viewtopic.php?f=16&t=1090http://www.tomasvasquez.com.br/forum/viewtopic.php?f=16&t=1090

Bom proveito!

VBA – Criando uma cópia somente dados de uma planilha no Excel

Mais uma que saiu do nosso fórum.

O pessoal precisou de uma macro no VBA para criar uma cópia dos dados da planilha (Worksheet) em uma nova, mas somente os dados, sem fórmulas. Como alguns devem saber, isso é simples usando o recurso Colar Especial->Valores. Mas como o mundo é exigente, precisamos fazer isso a “rodo”, e é nesse caso que as macros ajudam.

A macro abaixo faz uma cópia da planilha atual, copiando somente seus dados:

Sub CopiaSomenteConteudo()
    Dim NewSheet As Worksheet, CurrentSheet As Worksheet
    'pega a planilha atual
    Set CurrentSheet = ActiveSheet
    'cria uma nova planilha
    Set NewSheet = ThisWorkbook.Worksheets.Add
    NewSheet.Name = CurrentSheet.Name & "2"
    'copia todas as células da planilha ativa
    CurrentSheet.Cells.Copy
    'cola só os valores na nova planilha
    NewSheet.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    'zera os objetos
    Set NewSheet = Nothing
    Set CurrenSheet = Nothing
End Sub

Simples, rápido, eficaz. Isso é Excel + VBA.

Bom proveito!

VBA – Transferindo os dados de um ListBox para uma Planilha

Por falta de muitos controles no VBA, o ListBox é quase uma unanimidade para fazer a apresentação dos dados de forma tabular. Ele funciona bem, permite adicionar múltiplas colunas, adicionar valores de cabeçalho, mudar o formato da seleção, enfim.

O fato é que, códigos de exemplo para alimentar um listBox com os dados de uma planilha há de monte, mas o contrário nem tanto. Bom, atendendo a pedidos, coloco aqui uma alternativa de código que faz exatamente o trabalho de copiar os dados de um ListBox para uma planilha.

Para não começar totalmente do zero, tomei como base o arquivo do site Ozgrid, disponível neste link:

http://www.ozgrid.com/FreeDownloads/ListBoxTransfer.zip

O código está bem bacana, porém, muito amarrado a planilha que foi produzida, sendo totalmente dependente da sua implementação. Abaixo segue o código com algumas mudanças de tal forma que, possa ser facilmente adaptado para qualquer planilha:

Sub Copiar_ListBox_Para_Planilha(ByVal NomePlanilhaDestino As String, ByRef listBoxControl As MSForms.ListBox)
    Dim iListCount As Integer, iColCount As Integer, iColListCount As Integer
    Dim iRow As Integer
    Dim linhaInicial As Integer
    Dim planilhaDestino As Worksheet
 
    Set planilhaDestino = ThisWorkbook.Worksheets(NomePlanilhaDestino)
    linhaInicial = planilhaDestino.Cells(65536, 2).End(xlUp).Row + 1
 
    If listBoxControl.RowSource <> "" Then
        iColListCount = Range(listBoxControl.RowSource).Columns.Count
    Else
        iColListCount = listBoxControl.ColumnCount - 1
    End If
 
    If listBoxControl.ColumnHeads Then
        iRow = 1
    End If
 
    'faz o loop para todos os itens do ListBox
    For iListCount = 0 To listBoxControl.ListCount - 1
        If listBoxControl.Selected(iListCount) = True Then  'testa se o item está selecionado
            listBoxControl.Selected(iListCount) = False
            iRow = iRow + 1
            'faz o loop pelas colunas
            For iColCount = 0 To iColListCount - 1
                'copia os dados do controle para a planilha
                planilhaDestino.Cells(iRow, iColCount + 1).Value = listBoxControl.List(iListCount, iColCount)
            Next iColCount
        End If
    Next iListCount
 
End Sub

Para fazer a chamada a esse método na mesma planilha disponibilizada, bastaria colocar o seguinte código:

Call Copiar_ListBox_Para_Planilha("Data Transfer Sheet", Me.ListBox1)

Ou seja, ele permite você definir o nome da planilha para qual será copiado o conteúdo e qual o controle ListBox será a fonte dos dados. O código faz várias considerações, prevendo que seus dados sejam baseados em adição manual ou através de RowSource. Copie o código abaixo e faça o teste em um ListBox existente!

Bom proveito!