VBA - 当我想删除已过滤和屏蔽的列时出现错误400

时间:2016-05-19 13:23:04

标签: excel vba excel-vba

我有问题。在我的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
你可以帮帮我吗?感谢。

2 个答案:

答案 0 :(得分:0)

如果问题是过滤器,请先使用ActiveSheet.AutoFilterMode = False从工作表中删除所有过滤器。另外根据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 = 1按照索引编号选择每个工作表,而不是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

答案 1 :(得分:0)

好的,我找到了解决方案:

事实上,我注意到,宏不能删除被屏蔽和过滤的列,因此我决定取消屏蔽被屏蔽的列,之后删除它们。

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

我没有找到更好的解决方案......

相关问题