如何批量删除多个Excel工作簿中的列

立即分享:

人们在 Excel 工作簿中保存机密数据是很常见的。 当这些工作簿必须与其他同事或朋友共享时,手动删除是唯一可用的选项。 但是,通过本文,您将了解如何从多个工作簿中快速删除机密列或不需要的列。

立即下载

如果你想tar如果您不想尽快使用该软件,那么您可以:

立即下载软件

否则,如果你想DIY,你可以阅读下面的内容。

让我们准备 GUI

如图所示,将工作表 1 重命名为“ControlPanel”。 使用形状,我们将在此工作表上添加按钮,使其显示为该工具的 GUI(图形用户界面)。 我们需要此 GUI 上的三个字段。 Field1 用于显示用户选择的工作簿。 字段 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 工作簿。

作者简介:

Nick Vipond 是一位数据恢复专家 DataNumen, Inc.,它是数据恢复技术领域的世界领先者,包括 单词恢复 和 outlook 恢复软件产品。 欲了解更多信息,请访问 datanumen.com.

立即分享:

评论被关闭。