VBA错误:“运行时错误1004:应用程序定义或对象定义错误”

时间:2016-02-21 13:34:09

标签: excel vba excel-vba

我是vba的一个完整的新手和一般的编码,并且正在关注udemy的vba课程。在其中一个练习(动态排序)中,我不断收到上述错误。在完全跟随老师的情况下被困这样是非常令人沮丧的..任何帮助都表示赞赏。

Sub Sort()
'
' Sort Macro
'
ThisWorkbook.Activate

Range("a2").Select

'find last row

mylr = ThisWorkbook.Sheets("sheet1").Cells(Rows.Count, 1).End(x1up).Row


ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C2:C5"),    _
    SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

With ActiveWorkbook.Worksheets("Sheet1").Sort
    .SetRange Range("A1:C5")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
End Sub

2 个答案:

答案 0 :(得分:2)

行错误?

mylr = ThisWorkbook.Sheets("sheet1").Cells(Rows.Count, 1).End(x1up).Row

顺便说一句,myLr用于什么?

答案 1 :(得分:2)

我不想让你离开课程计划的流程,但这看起来像是手工排序操作的记录代码,非常详细。实际上,您只需要以下内容。

我建议你练习设置VBE的工具►选项►编辑器►Require variable declaration或手动将Option Explicit¹放在每个模块代码表的顶部。目前, x1up 常量拼写错误。

Sub mySort()
    ' Sort Macro

    'reference the workbook and worksheet
    With ThisWorkbook.Sheets("sheet1")
        'reference the range to receive the sorting method
        With .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp).Offset(0, 2))
            'sort the cells based on the third column in a descending order
            .Cells.Sort Key1:=.Columns(3), Order1:=xlDescending, _
                        Orientation:=xlTopToBottom, Header:=xlYes
        End With
    End With

End Sub

永远不要将您的子程序命名为保留字。这有效地覆盖了该命令或常量的功能,以支持更新的名称。通过命名您的函数Sub Sort(),然后尝试调用Range.Sort method您的子程序可以有效地尝试回忆自己。

¹在VBE的工具►选项►编辑器属性页面中设置需要变量声明会将 Option Explicit 语句放在每个新的顶部创建代码表。这个 将避免像拼写错误那样愚蠢地编码错误以及影响你在变量中使用正确的变量类型 宣言。在没有声明的情况下即时创建的变量都是变体/对象类型。使用选项显式是 被广泛认为是“最佳实践”。