VBA – 错误400当我想删除过滤和蒙面的列

我有个问题。 在我的VBA中,我将工作簿复制到其他工作簿中,之后,所有被屏蔽的列都被删除。 它完美的工作,除了当我过滤表时,VBA显示Error 400当它试图删除一个蒙面的列。

错误在这里: ActiveSheet.Columns(C).Delete

这是我的代码:

 Sub Test(targetWorkbookName As String) S1 = Sheets("PARAM").Range("G35").Value Dim F As Integer, C As Integer, derniereligne Dim targetWorkbook As Workbook On Error Resume Next Set targetWorkbook = Workbooks(targetWorkbookName) On Error GoTo 0 If (targetWorkbook Is Nothing) Then _ Set targetWorkbook = Workbooks.Open(targetWorkbookName) 

我的循环删除蒙面的列(和错误的地方):

  For F = 1 To Sheets.Count ActiveSheet.Select For C = 15 To 2 Step -1 ActiveSheet.Columns(C).Select Selection.End(xlDown).Select derniereligne = ActiveCell.Row If ActiveSheet.Columns(C).Hidden = True Then ActiveSheet.Columns(C).Delete End If Next C Next F 

其余的第一个子

 Application.DisplayAlerts = False Sheets("PARAM").Delete ActiveWorkbook.ActiveSheet.Shapes.Range(Array("Button 2")).Select Selection.Delete ActiveWorkbook.ActiveSheet.Shapes.Range(Array("Button 9")).Select Selection.Delete Dim ret As Integer ret = MsgBox("Voulez-vous verouiller la feuille ?", vbYesNo) If ret = vbYes Then Sheets("A").Protect Password:=S1 End If targetWorkbook.SaveAs Filename:=targetWorkbookName, FileFormat:=xlOpenXMLWorkbook 'targetWorkbook.Close savechanges:=True End Sub 

第一个保存为excel的子文件:

 Sub SaveXL() Dim Nom2 As String Dim Jour2 As String Dim FPath2 As String Jour2 = Format(Now(), "yyyymmdd - h\hmm") Nom2 = Jour2 & " Pricelist" FPath2 = Sheets("PARAM").Range("B33").Value 'On Error GoTo fin4 fichier = Application.GetSaveAsFilename(FPath2 & Nom2, "Fichiers Excel (*.xls), *.xls") If fichier <> "Faux" Then ActiveWorkbook.SaveCopyAs fichier Test GetAName(fichier) Else MsgBox "Le fichier n'a pas été enregistré" End If Exit Sub 'fin4: MsgBox "La création de l'excel a échoué" End Sub 

你可以帮帮我吗 ? 谢谢。

如果问题是filter,请先使用ActiveSheet.AutoFilterMode = False首先从工作表中删除所有filter。 同样按照Daves的评论,你的循环无所事事,最好使用类似下面的东西。

 Dim wks As Worksheet For Each wks In Me.Worksheets wks.Activate ActiveSheet.AutoFilterMode = False For C = 15 To 2 Step -1 ActiveSheet.Columns(C).Select Selection.End(xlDown).Select derniereligne = ActiveCell.Row If ActiveSheet.Columns(C).Hidden = True Then ActiveSheet.Columns(C).Delete End If Next C Next wks 

或者保持你的F = 1select每个工作表的索引号,而不是ActiveSheet ,因为这是无所事事。

 For F = 1 To Sheets.Count Sheets(F).Select ActiveSheet.AutoFilterMode = False For C = 15 To 2 Step -1 ActiveSheet.Columns(C).Select Selection.End(xlDown).Select derniereligne = ActiveCell.Row If ActiveSheet.Columns(C).Hidden = True Then ActiveSheet.Columns(C).Delete End If Next C Next F 

好吧,我发现了一个解决scheme:

实际上,我注意到,macros不能删除被屏蔽和过滤的列,所以我决定揭开被屏蔽的列,然后删除它们。

 If ActiveSheet.Columns(C).Hidden = True Then ActiveSheet.Columns(C).Hidden = False ActiveSheet.Columns(C).Delete End If 

我没有find更好的解决scheme…