Tag Archives: Planilha

VBA – Exportar Planilha para TXT

Nascido das mãos do colega Rafael do nosso fórum, o código abaixo realiza a exportação de uma planilha ativa no Excel para um arquivo Texto:

Sub Exportar()
    Application.DisplayAlerts = False
 
    template_file = ActiveWorkbook.FullName
 
    fileSaveName = Application.GetSaveAsFilename( _
                   InitialFileName:="C:\users" + _
                                    VBA.Strings.Format(Now, "mmddyyyy") + ".txt", _
                   fileFilter:="Text Files (*.txt), *.txt")
 
    If fileSaveName = False Then
        Exit Sub
    End If
 
    'cria uma cópia da pasta de trabalho atual da planilha atual
    Dim newBook As Workbook
    Dim plan As Worksheet
    Set newBook = Workbooks.Add
 
    ThisWorkbook.ActiveSheet.Copy Before:=newBook.Sheets(1)
 
    'exclui as demais planilhas
    For Each plan In newBook.Sheets
        If plan.Name <> ActiveSheet.Name Then
            newBook.Worksheets(plan.Index).Delete
        End If
    Next
 
    newBook.SaveAs Filename:= _
                          fileSaveName, FileFormat:=xlTextWindows, _
                          CreateBackup:=False
 
    'fecha a pasta de trabalho gerada
    newBook.Close SaveChanges:=True
    Set newBook = Nothing
 
    MsgBox "O arquivo foi exportado com sucesso! ", vbInformation, "Exportar arquivos"
 
End Sub

A parte bacana deste código é não necessidade de utilizar ou precisar conhecer de manipulação de arquivos, uma vez que estamos utilizando o “Salvar Como” arquivo texto. Fica bem mais fácil de customizar!

O link original do código do fórum pode ser visto aqui:

https://www.tomasvasquez.com.br/forum/viewtopic.php?t=1651&p=8162

Bom proveito!

Excel – Desbloqueando Planilhas

Esse é um dos posts “indesejados” por aqueles que trabalham com Excel em seu dia a dia, mas que precisam estar na base de conhecimento de todos eles, pois uma das características de qualquer bom sistema, é saber de suas fragilidades.

O Excel possui nativamente um sistema de proteção de planilhas baseados em senha, mas que é um pouco frágil, do ponto de vista técnico/avançado. Tão frágil que existe um código em VBA que é quase uma convenção entre os programadores da linguagem para desbloquear planilhas de forma rápida. Abaixo segue o mesmo:

Sub DesprotegerEstaPlanilha()
 
    Dim i, i1, i2, i3, i4, i5, i6 As Integer, j As Integer, k As Integer, l As Integer, m As Integer, n As Integer
    On Error Resume Next
    For i = 65 To 66
        For j = 65 To 66
            For k = 65 To 66
                For l = 65 To 66
                    For m = 65 To 66
                        For i1 = 65 To 66
                            For i2 = 65 To 66
                                For i3 = 65 To 66
                                    For i4 = 65 To 66
                                        For i5 = 65 To 66
                                            For i6 = 65 To 66
                                                For n = 32 To 126
                                                    ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
                                                    If ActiveSheet.ProtectContents = False Then
                                                        MsgBox "Planilha " & ActiveSheet.Name & " debloqueada sob a senha: " & Chr(i) & Chr(j) & _
                                                               Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
                                                               Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
                                                        Exit Sub
                                                    End If
                                                Next
                                            Next
                                        Next
                                    Next
                                Next
                            Next
                        Next
                    Next
                Next
            Next
        Next
    Next
End Sub

O motivo da facilidade do desbloqueio está na simplicidade do algoritmo de encriptação da senha. Conforme anunciado pela própria especificação do Office Open XML specification, a mesma se baseia em um hash de 16 bits. Uma lida rápida em documentações de criptografia nos leva a constatação de que o algoritmo hash produz resultados “sem volta”, ou seja, é impossível obter o valor original a partir de “seu hash”, mas também que a base em 16 bit é quebrável sem muito esforço computacional. A função acima quebra a senha fazendo uso de força bruta, o que comprova a fragilidade do método utilizado.

Disso, dá para tirar algumas conclusões e cuidados que devemos tomar quando falamos de aplicativos e planilhas sérias em nosso dia a dia:

  • Use o recurso de proteção de planilhas somente para bloqueio de nevegação ou algo parecido
  • Se quiser proteger efetivamente, use proteção de senha do arquivo
  • Use senhas fortes sempre que possível

Para projetos VBA:

  • Use sempre proteção de senha para os projetos
  • Siga as dicas deste blog e do nosso fórum sobre técnicas de segurança para projetos VBA

Mais algumas dicas:

http://www.oraxcel.com/projects/encoffice/help/How_safe_is_Excel_encryption.html

Referências


http://kohei.us/2008/01/18/excel-sheet-protection-password-hash/

Excel – O que é uma Pasta de trabalho no Excel?

Uma ajudinha a con sabor de Excel

Essa foi uma questão divertida, até. Ela surgiu não em um fórum, como de costume, mas de uma referência feita ao blog cujo critério de busca era exatamente o título deste post.

Como em muitas ocasiões e discussões em fóruns, blogs e outros meios de interação que existem na internet, o termo pasta de trabalho e planilha são pouco esclarecidos, resolvi colocar aqui um pequeno guia para elucidar e definir os mesmos, a fim de facilitar as discussões. Esta é uma idéia geral, mas suficiente para seguir em frente com longas discussões.

Vamos lá:

Pasta de trabalho

A pasta de trabalho é o arquivo do Excel como um todo, englobando todos os seus objetos, sendo eles planilhas, gráficos, planilhas de macro, tabelas dinâmicas, gráficos dinâmicos e projetos VBA. Ele é representado fundamentalmente pelo arquivo “fisico”, ou seja, o .xls (que pode ser também xlsx, xlsm, xla, xlt, entre outros formatos que em que o Excel pode ser salvo).

É muito comum este ser chamado de planilha. Até faz sentido, já que em sua concepção, o Excel é um gerenciador de planilhas eletrônicas. Porém, notem que o termo referente está no plural, ou seja, “planilhas”. Um arquivo do Excel é então, no mínimo um conjunto de planilhas, termo que será definido a seguir.

Planilha

Uma planilha é uma “aba”, popularmente falando. Normalmente, quando você abre o Excel, ele cria automaticamente uma nova pasta de trabalho com 3 planilhas. As planilhas podem ser visíveis na parte inferior da janela, como na figura abaixo:

Abas ou Planilhas

Tecnicamente, é correto chamar de “planilha” cada uma destas abas.

Arquivo

Um arquivo no contexto do Excel representa necessariamente uma pasta de trabalho, como foi explicado acima.

Esclarecendo

Portanto, de posse dos conceitos acima, é comum começarmos a estranhar frases como “tenho uma planilha do Excel”, ou “tenho um problema na minha planilha”, já que a primeira pergunta que se faz ao autor é “você quer dizer planilha ou pasta de trabalho?”.

Para programadores VBA, esse conceito tem que estar obrigatoriamente claro, já que, ao trabalhar com o modelo de objetos do Excel, esses dois ficam bem distintos, sendo representados pelos classes Worksheet e Workbook no VBA. Qualquer manipulação sobre qualquer um destes, as diferenças ficarão evidentes.

Só como um exemplo, uma planilha ou Worksheet contém uma coleção de células/cells. Já a pasta de trabalho ou Workbook, obrigatoriamente contém uma coleção de planilhas/worksheets, não sendo possível que ela tenha células diretamente.

Concluindo

Essa é a idéia geral. Seria preciso entrar no mérito de todos os objetos válidos do Excel para saber dar o correto nome aos bois, mas saber o descrito acima já ajuda e muito no entendimento das dúvidas que são colocadas nos fóruns e grupos de discussão.

Bom proveito a todos!