Det är mycket vanligt att människor sparar konfidentiella data i Excel-arbetsböcker. När dessa arbetsböcker måste delas med andra kollegor eller vänner är manuell radering det enda tillgängliga alternativet. Men med den här artikeln lär du dig hur du snabbt tar bort konfidentiella kolumner eller oönskade kolumner från flera arbetsböcker.
Hämta hem nu
Om du vill börja använda programvaran så snart som möjligt kan du:
Annars kan du läsa innehållet nedan om du vill göra det själv.
Låt oss förbereda GUI
Såsom visas på bilden, byt namn på Ark 1 till “ControlPanel”. Med hjälp av former lägger vi till knappar på det här arket så att det visas som GUI (grafiskt användargränssnitt) för detta verktyg. Vi behöver tre fält på detta GUI. Fält1 är att visa den arbetsbok som användaren har valt. Fält 2 är att visa kolumner från den valda arbetsboken som rullgardinsmeny. Fält 3 är en lista över kolumner som ska tas bort från arbetsboken.
Hur fungerar det?

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
Justera det
Från och med nu hanterar detta skript bara en arbetsbok. Men med den senast använda radmetoden kan du få makrot att hantera flera arbetsböcker i ett batch-läge. Skriptet kan dock inte öppna en korrupt Excel arbetsbok.
Författarintroduktion:
Nick Vipond är en dataåterställningsexpert i DataNumen, Inc., som är världsledande inom teknik för återställning av data, inklusive ordåterställning och programvaruprodukter för återställningsprogram. För mer information besök www.datanumen.com.