我有问题。在我的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
你可以帮帮我吗?感谢。
答案 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
我没有找到更好的解决方案......