Confesso que manter o tamanho das planilhas sejam um tema recorrente e difícil de divulgar. Certamente causa interesse, mas o ponto principal é: Como deixá-las menores?
Ja abordei este assunto diversas vezes, sobre óticas distintas: Explicando o motivo destas ficarem assim, mostrando ações efetivas de torná-las menores, demonstrei técnicas com o VBA e tudo o mais.
Nos idos de 2009, escrevi coisas similares as demonstradas abaixo:Possivelmente já percebeu como suas planilhas inflam sem qualquer aparente explicação, como se tivesse comido vários quilos de açúcar. De uma hora prá outra o que tinha apenas uns parcos 530 KB de peso, passa a ter e exibir exuberantes 2.350 KB. O que aconteceu? Será que nossas planilhas atacam a geladeira durante a madrugada?Com o passar do tempo, sem que necessariamente tenhamos acrescentado algum conteúdo relevante, nossas planilhas persistem em aumentar.
:Linhas inofensivasÉ muito comum que somente abramos o nosso arquivo, efetuando pequenas alterações em certas células, além de vez ou outra inserirmos algumas linhas em branco, apenas para posicionarmos algumas informações. O que talvez não percebamos é que estas inofensivas linhas em branco não somem, antes são salvas, ocupando espaço desnecessário. Lógico que isso é muito comum devido a grande manipulação de dados que efetuamos diariamente. Nunca paramos prá pensar em tamanho no nosso dia-a-dia. Somente quando não temos espaço, ou quando o administrador da rede diz-nos que nosso espaço no Public está lotado é que pensamos no motivo de tão poucas planilhas ocuparem tanto espaço.:Mandando suas planilhas para o SPAO MS Excel não consegue distinguir as linhas que estão em branco (pelo menos não o fazia corretamente na versão de 2009) ou vazias e acaba por gravar todas as ocorrências em branco como conteúdo das nossas planilhas. Além disso, caso formatemos uma coluna inteira até a linha 1 milhão (mesmo que sem querer), ao fechar a planilhas teremos gravado aquela coluna em um milhão de linhas, apenas porque esquecemos da formatação ali.O tamanho das planilhas é uma preocupação constante nas nossas aplicações. A não ser que realmente precisemos ter ocorrências extensas, deveríamos automatizar a deleção das linhas excedentes.
Como faremos isso?
Técnicas de exclusão de linhas podem ser colocadas ao fecharmos e/ou gravarmos nossas planilhas...Isso as fariam efetuar atividades 'aeróbicas' constantemente, queimando suas calorias extras...Deletar linhas e efetuar as tais tarefas aeróbicas podem tornar o fechamento das planilhas muito lento dependendo do tamanho.
Confesso que nesta época era persistente, por isso não parei por aí:
Quando nossas planilhas recebem dados de outras bases (fontes), seja através de ODBC, Macros ou mesmo informações da Internet, não raro aparecem melhares de linhas em branco. Caso ache útil deletá-las poderá implementar a solução abaixo.Function EliminateThousandBlankLines(StarLine as Long)' Author: André Luiz Bernardes.' Date: 05.02.2009Let nRow = StartLineDo While ActiveSheet.Cells(nRow, 1) <> ""If ActiveSheet.Cells(nRow, 1).Value <> strUserName ThenActiveSheet.Rows(nRow).EntireRow.DeleteElseLet nRow = nRow + 1End IfLoopEnd Function
Nesta missão de suma importância, onde a deleção de linhas e colunas desnecessárias mostram-se tão preementes, deixo-vos códigos utilíssimos:
Function LastRow (nColumn As String, InitLine As Single) As Single' Author: Date: Contact:' André Bernardes 16/09/2008 14:20 bernardess@gmail.com' Retorna o número de ocorrências.Dim nLine As SingleDim nStart As SingleDim nFinito As SingleDim Cabessalho As SingleDim nCeo As StringApplication.VolatileLet nStart = InitLine + 1Let nFinito = 65000Let Cabessalho = InitLineDo While nStart < nFinitoLet nCeo = nColumn & Trim(Str(nStart))If Application.ActiveSheet.Range(nCeo).Value = "" ThenExit DoEnd If'Let Application.StatusBar.Value = " Linha: " & nStartLet nStart = nStart + 1LoopLet LastRow = (nStart - 1) '- Cabeçalho'Let Application.StatusBar.Value = " "End FunctionFunction FindLastColumn() As SingleLet FindLastColumn = Range("IV10").End(xlToLeft).Column'ActiveSheet.UsedRange.Columns.Count'Dim LastCol As Integer'Let LastCol = ActiveSheet.Cells.Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByColumns).Column'Let FindLastColumn = LastColEnd FunctionPrivate Sub Worksheet_BeforeDoubleClick (ByVal Target As Range, Cancel As Boolean)NomePlanilha = ActiveSheet.NameNomePasta = ActiveWorkbook.NameEndereco = ActiveWorkbook.PathUsuarioExcel = Application.UserNameUsuarioEstacao = Environ("USERNAME")UltimaLinhaNumero = ActiveCell.SpecialCells(xlCellTypeLastCell).RowUltimaColunaNumero = ActiveCell.SpecialCells(xlCellTypeLastCell).ColumnUltimaCelulaRange = ActiveCell.SpecialCells(xlCellTypeLastCell).Address & " ou " & ActiveCell.SpecialCells(xlCellTypeLastCell).Address(RowAbsolute:=False) & " ou " & ActiveCell.SpecialCells(xlCellTypeLastCell).Address(ReferenceStyle:=xlR1C1)CelulaAtualLinhaNumero = ActiveCell.RowCelulaAtualColunaNumero = ActiveCell.ColumnCelulaAtualRange = ActiveCell.Address & " ou " & ActiveCell.Address(RowAbsolute:=False) & " ou " & ActiveCell.Address(ReferenceStyle:=xlR1C1)CelulaAtualRelativo = ActiveCell.Address(ReferenceStyle:=xlR1C1, RowAbsolute:=False, ColumnAbsolute:=False, RelativeTo:=Worksheets(NomePlanilha).Cells(1, 1))MsgBox "Planilha Atual" & vbCrLf & vbCrLf & _vbTab & "Nome" & vbTab & vbTab & ": " & NomePlanilha & vbCrLf & _vbTab & "Última Linha" & vbTab & ": " & UltimaLinhaNumero & vbCrLf & _vbTab & "Última Coluna" & vbTab & ": " & UltimaColunaNumero & vbCrLf & _vbTab & "Última Célula" & vbTab & ": " & UltimaCelulaRange & vbCrLf & vbCrLf & vbCrLf & _"Célula Atual" & vbCrLf & vbCrLf & _vbTab & "Número da Linha" & vbTab & ": " & CelulaAtualLinhaNumero & vbCrLf & _vbTab & "Número da Coluna" & vbTab & ": " & CelulaAtualColunaNumero & vbCrLf & _vbTab & "Range" & vbTab & vbTab & ": " & CelulaAtualRange & vbCrLf & _vbTab & "Relativo a A1" & vbTab & ": " & CelulaAtualRelativo & vbCrLf & vbCrLf & vbCrLf & _"Outras Informações" & vbCrLf & vbCrLf & _"Nome da Pasta de Trabalho" & vbTab & vbTab & ": " & NomePasta & vbCrLf & _"Caminho da Pasta de Trabalho" & vbTab & ": " & Endereco & vbCrLf & _"Usuario (Excel)" & vbTab & vbTab & vbTab & ": " & UsuarioExcel & vbCrLf & _"Usuario (Estação)" & vbTab & vbTab & vbTab & ": " & UsuarioEstacao, vbInformation, "Informações"End Sub
Referência: Canguru
Tags: Excel, delete, rows, lines, excel size, cell, cell info, worksheet, small workbook,