vba - 需要改变这个宏中的一点小东西

标签 vba excel

我有这个宏,除了一个更改之外,它完全符合我的要求。我希望它按“M”列而不是“A”排序。我尝试过手动更改它,但总是出现错误。我知道这可能是一个简单的修复,但我似乎无法理解。提前致谢!

我尝试将“Field:=1”更改为 Field:="13",但收到“运行时错误‘1004’范围类的自动筛选方法失败”。

调试然后突出显示“rngFilter.AutoFilter Field:=13, Criteria1:=cell.Value”

Private Sub CommandButton1_Click()


Dim wbDest As Workbook
Dim rngFilter As Range, rngUniques As Range
Dim cell As Range


Set rngFilter = Range("A1", Range("A" & Rows.Count).End(xlUp))

Application.ScreenUpdating = False

With rngFilter


    .AdvancedFilter Action:=xlFilterInPlace, Unique:=True


    Set rngUniques = Range("A2", Range("A" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)


    ActiveSheet.ShowAllData

End With


For Each cell In rngUniques


    Set wbDest = Workbooks.Add(xlWBATWorksheet)


    rngFilter.AutoFilter Field:=1, Criteria1:=cell.Value


    rngFilter.EntireRow.Copy
    With wbDest.Sheets(1).Range("A1")
        .PasteSpecial xlPasteColumnWidths
        .PasteSpecial xlPasteValuesAndNumberFormats
    End With
    Application.CutCopyMode = True


    wbDest.Sheets(1).Name = cell.Value


    wbDest.SaveAs ThisWorkbook.Path & Application.PathSeparator & _
        cell.Value & " " & Format(Date, "mmm_dd_yyyy")

Next cell

rngFilter.Parent.AutoFilterMode = False
Application.ScreenUpdating = True

End Sub

最佳答案

尝试一下。我已经更新了代码,因此您所需要做的就是将 sColumn 从 A 更改为您想要的任何列字母:

Private Sub CommandButton1_Click()

    Const sColumn As String = "A"

    Dim wbDest As Workbook
    Dim rngFilter As Range, rngUniques As Range
    Dim cell As Range

    Set rngFilter = Range(sColumn & "1", Range(sColumn & Rows.Count).End(xlUp))

    Application.ScreenUpdating = False

    With rngFilter
        .AdvancedFilter Action:=xlFilterInPlace, Unique:=True
        Set rngUniques = Range(sColumn & "2", Range(sColumn & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)
        On Error Resume Next
        ActiveSheet.ShowAllData
        On Error GoTo 0
    End With


    For Each cell In rngUniques
        Set wbDest = Workbooks.Add(xlWBATWorksheet)
        rngFilter.AutoFilter Field:=1, Criteria1:=cell.Value
        rngFilter.EntireRow.Copy
        With wbDest.Sheets(1).Range("A1")
            .PasteSpecial xlPasteColumnWidths
            .PasteSpecial xlPasteValuesAndNumberFormats
        End With
        Application.CutCopyMode = True
        wbDest.Sheets(1).Name = cell.Value
        Application.DisplayAlerts = False
        wbDest.SaveAs ThisWorkbook.Path & Application.PathSeparator & cell.Value & " " & Format(Date, "mmm_dd_yyyy")
        wbDest.Close False
        Application.DisplayAlerts = True
    Next cell

    rngFilter.Parent.AutoFilterMode = False
    Application.ScreenUpdating = True

End Sub

关于vba - 需要改变这个宏中的一点小东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080856/

相关文章:

vba - 在 VBA 中读取撤消历史记录

vba - VSTO 与 Excel-DNA 的优缺点?

Excel:COUNTIF函数将 'less than'字符视为运算符

vba - 比较 2 个数组

vba - 仅适用于一张工作表的 OnKey

vba - 防止 Range.Find() 更改 "match entire cell content"用户界面设置

excel - Vba Excel 维护大数据列表的最佳方式

excel - 登录后如何网页抓取 Steam?

c# - 从 Excel 读取数据

excel - 如何在VBA中管理编译错误