Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA代码-自定义对除日期列以外的所有列进行排序 第一个帖子,我几乎不认为自己是一个编码器,所以这很容易…我已经为这段代码挣扎了一段时间,tt似乎适用于除F之外的所有列,F以mm/dd/yyyy格式填充日期。当代码到达带有日期的F列时,它不会完全执行_Excel_Vba_Date - Fatal编程技术网

Excel VBA代码-自定义对除日期列以外的所有列进行排序 第一个帖子,我几乎不认为自己是一个编码器,所以这很容易…我已经为这段代码挣扎了一段时间,tt似乎适用于除F之外的所有列,F以mm/dd/yyyy格式填充日期。当代码到达带有日期的F列时,它不会完全执行

Excel VBA代码-自定义对除日期列以外的所有列进行排序 第一个帖子,我几乎不认为自己是一个编码器,所以这很容易…我已经为这段代码挣扎了一段时间,tt似乎适用于除F之外的所有列,F以mm/dd/yyyy格式填充日期。当代码到达带有日期的F列时,它不会完全执行,excel,vba,date,Excel,Vba,Date,为了得到这段代码,我使用了excel宏记录器并对范围进行了个性化设置 Sub Sorting() ' ' Sorting Macro ' ' Range("A4").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select ActiveWorkbook.Worksheets("Ambulatory Care").Sort.SortFiel

为了得到这段代码,我使用了excel宏记录器并对范围进行了个性化设置

Sub Sorting()
'
' Sorting Macro
'

'
    Range("A4").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWorkbook.Worksheets("Ambulatory Care").Sort.SortFields.Clear
Dim lastrow As Long
lastrow = Cells(Rows.Count, 2).End(xlUp).Row
ActiveWorkbook.Worksheets("Ambulatory Care").Sort.SortFields.Add Key:=Range( _
    "A5:A" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
ActiveWorkbook.Worksheets("Ambulatory Care").Sort.SortFields.Add Key:=Range( _
    "B5:B" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
ActiveWorkbook.Worksheets("Ambulatory Care").Sort.SortFields.Add Key:=Range( _
    "C5:C" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
ActiveWorkbook.Worksheets("Ambulatory Care").Sort.SortFields.Add Key:=Range( _
    "I5:I" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
ActiveWorkbook.Worksheets("Ambulatory Care").Sort.SortFields.Add Key:=Range( _
    "F5:F & lastrow"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal
With ActiveWorkbook.Worksheets("Ambulatory Care").Sort
    .SetRange Range("A4:J798")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
Range("A4").Select
End Sub

这是两个问题合一

[它]似乎适用于除F之外的所有列

您的代码具有
Key:=Range(“F5:F&lastrow”),
而不是
Key:=Range(“F5:F”&lastrow”),
(请注意
位置的更改)

关于如何使.SetRange(“A4:J798”)动态IE A4:最后一排

使用与前面相同的技术:
.SetRange(“A4:J”和lastrow)

其他一些要点 这里还有一些额外的学习机会。使用宏记录器是了解使用了哪些函数以及通常传递给这些函数的参数的一种很好的技术。但是记录器并不微妙,它记录了一切,而不是开发好的代码

正如您会发现的那样,尝试定制此录制的代码可能很困难-录制的内容在宏中可能不需要。因此,我冒昧地重写了您的代码(基于录制的内容)我没有尝试添加任何新的技术-其他评论员可能会找出不同的有效方法来实现你想要的

Sub Sorting()
'
' Sorting Macro
'
' You don't need the original selection lines. You are working directly with the ranges you want below.
' Good indenting is your friend - it makes the logic and flow easier to see.
' All the work you do is with the one worksheet.
' So to make life easier, I am using a single outer "With" to prevent a lot of retyping. 
    With ThisWorkbook.Worksheets("Ambulatory Care").Sort
        .SortFields.Clear
        Dim lastrow As Long
    ' make sure all your range references are fully qualified. Otherwise Excel will default to what is active at the time (which may not be what you think it is or may change during the running of the code). 
        lastrow = .Cells(.Rows.Count, 2).End(xlUp).Row
        .SortFields.Add Key:=Range( _
            "A5:A" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
        .SortFields.Add Key:=Range( _
            "B5:B" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
        .SortFields.Add Key:=Range( _
            "C5:C" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
        .SortFields.Add Key:=Range( _
            "I5:I" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
        .SortFields.Add Key:=Range( _
            "F5:F" & lastrow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
        .SetRange Range("A4:J" & lastrow)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
' Final select not required
End Sub
现在您可以查看该代码,并确定是否可以再整理它。它更易于阅读和理解

补充阅读:


盲目使用录制的宏所产生的许多问题都可以通过前面这些问题的答案中提供的建议来避免。

…与您之前所做的相同:
.SetRange(“A4:J”&lastrow)
。作为一个额外的学习点,本网站上的一些帖子有助于您避免使用
。选择
活动工作簿
。在VBA中激活
,这些帖子最终会绊倒您!@maramohd:请随意“接受””他回答。投票和接受答案是StackOverflow表达感激的工具。干杯,很高兴我能帮忙。