Sådan batches sletning af kolonner i flere Excel-projektmapper

Det er meget almindeligt at se folk gemme fortrolige data i Excel-projektmapper. Når disse projektmapper skal deles med andre kolleger eller venner, er manuel sletning den eneste tilgængelige mulighed. Men med denne artikel lærer du, hvordan du hurtigt sletter fortrolige kolonner eller uønskede kolonner fra flere projektmapper.

Hent nu

Hvis du vil begynde at bruge softwaren så hurtigt som muligt, kan du:

Download softwaren nu

Ellers kan du læse indholdet nedenfor, hvis du vil gøre det selv.

Lad os forberede GUI

Som vist på billedet skal du omdøbe ark 1 til “ControlPanel”. Ved hjælp af figurer tilføjede vi knapper på dette ark for at få det til at vises som GUI (grafisk brugergrænseflade) til dette værktøj. Vi har brug for tre felter på denne GUI. Felt1 skal vise den projektmappe, der er valgt af brugeren. Felt 2 er at vise kolonner fra den valgte projektmappe som rullemenu. Felt 3 er en liste over kolonner, der skal fjernes fra projektmappen.Forbered GUI

Hvordan virker det?

VBA-kodeProceduren p_fpick giver brugeren mulighed for at gennemse og vælge Excel-filer. Så snart en Excel-fil er valgt, læser scriptet kolonnenavne fra Sheet1, og disse navne vises som rullemenu. Proceduren "Add_Column" giver brugeren mulighed for at tilføje det valgte kolonnenavn fra rullemenuen for at føje til listen over kolonner, der skal slettes. Den endelige procedure "Slet_Kolonner" åbner den projektmappe, der var anført under feltet "Vælg projektmappen" og fjerner alle valgte kolonner. Efter sletning gemmes og lukkes projektmappen.

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

Tilpas det

Fra nu af håndterer dette script kun en projektmappe. Men ved hjælp af den sidst anvendte række-metode kan du få makroen til at håndtere flere projektmapper i en batch-tilstand. Imidlertid kan scriptet ikke åbne en korrupt Excel projektmappe.

Forfatter Introduktion:

Nick Vipond er en datagendannelsesekspert i DataNumen, Inc., som er verdens førende inden for datagendannelsesteknologier, herunder ordgendannelse og Outlook Outlook-softwareprodukter. For mere information besøg www.datanumen.com .

Kommentarer er lukket.