Como excluir colunas em lote em várias pastas de trabalho do Excel

Compartilhe agora:

É muito comum ver pessoas salvando dados confidenciais em pastas de trabalho do Excel. Quando essas pastas de trabalho precisam ser compartilhadas com outros colegas ou amigos, a exclusão manual é a única opção disponível. No entanto, com este artigo, você aprenderá como excluir rapidamente colunas confidenciais ou indesejadas de várias pastas de trabalho.

Faça o download

Se você deseja começar a usar o software o mais rápido possível, então você pode:

Baixe o software agora

Caso contrário, se você quiser DIY, pode ler o conteúdo abaixo.

Vamos preparar a GUI

Segundo as indicações da imagem, renomeie a folha 1 como “ControlPanel”. Usando formas, adicionaríamos botões nesta folha para fazê-la aparecer como GUI (Graphical User Interface) para esta ferramenta. Precisamos de três campos nesta GUI. Field1 é para exibir a pasta de trabalho selecionada pelo usuário. O campo 2 é para exibir as colunas da pasta de trabalho selecionada como suspensa. O campo 3 é uma lista de colunas que devem ser removidas da pasta de trabalho.Preparar a GUI

Como funciona?

Código VBAO procedimento p_fpick permitiria ao usuário navegar e selecionar arquivos Excel. Assim que um arquivo do Excel é selecionado, o script lê os nomes das colunas da Planilha1 e esses nomes são exibidos como suspensos. O procedimento “Add_Column” permitirá ao usuário adicionar o nome da coluna selecionada no menu suspenso para adicionar à lista de colunas que devem ser excluídas. O procedimento final “Delete_Columns” abriria a pasta de trabalho listada no campo “Selecione a pasta de trabalho” e removeria todas as colunas selecionadas. Após a exclusão, a pasta de trabalho seria salva e fechada.

Sub P_fpick()
    Dim v_fd As Office.FileDialog
    Set v_fd = Application.FileDialog(msoFileDialogFilePicker)
    With v_fd
        .AllowMultiSelect = False
        .Title = "Please select the Excel workbook"
        .Filters.Clear
        .Filters.Add "Excel", "*.xls*"
        If .Show = True Then
            cp.Range("B4").Value = .SelectedItems(1)
        End If
    End With
    
    Dim wb As Workbook
    Dim ab As Workbook
    
    Set ab = ThisWorkbook
    Set wb = Workbooks.Open(cp.Range("B4").Value)
    
    Dim v_sheets As String
    v_sheets = ""
    
    Dim lc As Long
    lc = wb.Sheets(1).Range("AZ1").End(xlToLeft).Column
    Dim c As Long
    For c = 1 To lc
        If v_sheets = "" Then
            v_sheets = wb.Sheets(1).Cells(1, c).Value
        Else
            v_sheets = v_sheets & "," & wb.Sheets(1).Cells(1, c).Value
        End If
    Next
    
    wb.Close False
    ab.Activate
    
    With ab.Sheets(1).Range("N4:O5").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=v_sheets
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With    
    
End Sub

Sub Add_Column()
    If Range("Q4").Value = "" Then
        Range("Q4").Value = Range("N4").Value
    Else
        Range("Q4").Value = Range("Q4").Value & "," & Range("N4").Value
    End If
End Sub

Sub Delete_Columns()
    Dim v_sheets() As String
    Dim ab As Workbook
    Dim wb As Workbook
    Set ab = ThisWorkbook
    Set wb = Workbooks.Open(Sheets(1).Range("B4").Text)
    Dim lc As Long
    lc = wb.Sheets(1).Range("AZ1").End(xlToLeft).Column
    Dim c As Long
    
    v_sheets = Split(ab.Sheets(1).Range("Q4").Text, ",")
    Dim intcount As Long
    For intcount = LBound(v_sheets) To UBound(v_sheets)
        For c = 1 To lc
            If wb.Sheets(1).Cells(1, c).Value = v_sheets(intcount) Then
                wb.Sheets(1).Columns(c).Delete Shift:=xlToLeft
            End If
        Next c
    Next intcount
    wb.Close True
    ab.Activate
End Sub

Ajuste-o

A partir de agora, esse script lida com apenas uma pasta de trabalho. Mas usando o último método de linha usado, você pode fazer a macro lidar com várias pastas de trabalho em um modo de lote. No entanto, o script não pode abrir um Excel corrompido pasta de trabalho.

Introdução do autor:

Nick Vipond é um especialista em recuperação de dados em DataNumen, Inc., líder mundial em tecnologias de recuperação de dados, incluindo recuperação de palavras e produtos de software de recuperação do Outlook. Para mais informações visite www.datanumen.com.

Compartilhe agora:

Comentários estão fechados.