Как выполнить пакетное удаление столбцов в нескольких книгах Excel

Поделись сейчас:

Очень часто можно увидеть, как люди сохраняют конфиденциальные данные в книгах Excel. Когда этими книгами нужно поделиться с другими коллегами или друзьями, удаление вручную — единственный доступный вариант. Однако из этой статьи вы узнаете, как быстро удалить конфиденциальные или ненужные столбцы из нескольких книг.

Скачать сейчас

Если вы хотите начать использовать программное обеспечение как можно скорее, то можете:

Загрузите программное обеспечение сейчас

В противном случае, если вы хотите сделать своими руками, вы можете прочитать содержимое ниже.

Давайте подготовим графический интерфейс

Как показано на изображении, переименуйте Лист 1 в «Панель управления». Используя формы, мы добавили бы кнопки на этот лист, чтобы он отображался как GUI (графический интерфейс пользователя) для этого инструмента. Нам нужны три поля в этом графическом интерфейсе. Поле1 предназначено для отображения рабочей книги, выбранной пользователем. Поле 2 предназначено для отображения столбцов из выбранной книги в виде раскрывающегося списка. Поле 3 — это список столбцов, которые следует удалить из рабочей книги.Подготовьте графический интерфейс

Как это работает?

Код VBAПроцедура p_fpick позволит пользователю просматривать и выбирать файлы Excel. Как только будет выбран файл Excel, сценарий будет считывать имена столбцов из Sheet1, и эти имена отображаются в виде раскрывающегося списка. Процедура «Add_Column» позволит пользователю добавить имя выбранного столбца из раскрывающегося списка, чтобы добавить его в список столбцов, которые необходимо удалить. Последняя процедура «Delete_Columns» откроет книгу, указанную в поле «Выберите книгу», и удалит все выбранные столбцы. После удаления рабочая книга будет сохранена и закрыта.

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

Настройте это

На данный момент этот скрипт обрабатывает только одну книгу. Но используя метод последней использованной строки, вы можете заставить макрос обрабатывать несколько книг в пакетном режиме. Однако скрипт не может открыть поврежденный Excel рабочая тетрадь.

Об авторе:

Ник Випонд — эксперт по восстановлению данных в DataNumen, Inc., которая является мировым лидером в области технологий восстановления данных, включая восстановление слов и программные продукты для восстановления Outlook. Для получения дополнительной информации посетите www.datanumen.com.

Поделись сейчас:

Комментарии закрыты.