Kolommen in meerdere Excel-werkmappen verwijderen

Het is heel gebruikelijk dat mensen vertrouwelijke gegevens opslaan in Excel-werkmappen. Wanneer deze werkboeken moeten worden gedeeld met andere collega's of vrienden, is handmatige verwijdering de enige beschikbare optie. In dit artikel leert u echter hoe u snel vertrouwelijke kolommen of ongewenste kolommen uit meerdere werkmappen kunt verwijderen.

Nu downloaden

Als je wilttarOm de software zo snel mogelijk te gebruiken, kunt u:

Download de software nu

Anders, als je zelf wilt klussen, kun je de onderstaande inhoud lezen.

Laten we de GUI voorbereiden

Wijzig de naam van Sheet 1 in "ControlPanel", zoals weergegeven in de afbeelding. Met behulp van vormen zouden we knoppen aan dit blad toevoegen om het te laten verschijnen als GUI (Graphical User Interface) voor deze tool. We hebben drie velden nodig op deze GUI. Veld1 is om de werkmap weer te geven die door de gebruiker is geselecteerd. Veld 2 is om kolommen uit de geselecteerde werkmap weer te geven als vervolgkeuzelijst. Veld 3 is een lijst met kolommen die uit de werkmap moeten worden verwijderd.Bereid de GUI voor

Hoe werkt het?

VBA-codeMet de procedure p_fpick kan de gebruiker door Excel-bestanden bladeren en deze selecteren. Zodra een Excel-bestand is geselecteerd, leest het script de kolomnamen uit Blad1 en worden deze namen weergegeven als vervolgkeuzelijst. De procedure “Add_Column” stelt de gebruiker in staat om de geselecteerde kolomnaam uit de vervolgkeuzelijst toe te voegen aan de lijst met kolommen die moeten worden verwijderd. De laatste procedure "Delete_Columns" zou de werkmap openen die werd vermeld onder het veld "Selecteer de werkmap" en zou alle geselecteerde kolommen verwijderen. Na verwijdering zou de werkmap worden opgeslagen en gesloten.

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

Pas het aan

Vanaf nu verwerkt dit script slechts één werkmap. Maar als u de laatst gebruikte rijmethode gebruikt, kunt u de macro meerdere werkmappen in een batchmodus laten verwerken. Het script kan echter geen corrupte Excel werkboek.

Auteur Introductie:

Nick Vipond is een data recovery-expert in DataNumen, Inc., de wereldleider in technologieën voor gegevensherstel, waaronder woordherstel en Outlook-herstelsoftwareproducten. Voor meer informatie bezoek www.datanumen.com.

Reacties zijn gesloten.