继续从这个问题开始,Defining a range from values in another range,(感谢Siddharth!)我想要编辑代码以按最短的天数顺序列出任务。有一个简短的评论与Siddharth聊天,他建议最好的方法是创建一个包含数据的临时表,在删除临时表之前按到达的数据进行排序并创建消息框。任何想法从哪里开始?我可以将味精字符串导出到新纸张,还是需要将其他变量存储在纸张中将输出存储在临时表单中进行排序
Option Explicit
Sub Notify()
Dim WS1 As Worksheet
Dim Chk As Range, FltrdRange As Range, aCell As Range
Dim ChkLRow As Long
Dim msg As String
On Error GoTo WhatWentWrong
Application.ScreenUpdating = False
Set WS1 = Sheets("Ongoing")
With WS1
ChkLRow = .Range("C" & Rows.Count).End(xlUp).Row
'~~> Set your relevant range here
Set Chk = .Range("A1:K" & ChkLRow)
'~~> Remove any filters
ActiveSheet.AutoFilterMode = False
With Chk
'~~> Filter,
.AutoFilter Field:=3, Criteria1:="NO"
'~~> Offset(to exclude headers)
Set FltrdRange = .Offset(1, 0).SpecialCells(xlCellTypeVisible)
'~~> Remove any filters
ActiveSheet.AutoFilterMode = False
For Each aCell In FltrdRange
If aCell.Column = 8 And _
Len(Trim(.Range("B" & aCell.Row).Value)) <> 0 And _
Len(Trim(aCell.Value)) <> 0 Then
msg = msg & vbNewLine & _
"Request for contractor code " & .Range("B" & aCell.Row).Value & _
" dispensing month " & .Range("A" & aCell.Row).Value & _
" has been in the cupboard for " & _
DateDiff("d", aCell.Value, Date) & " days."
End If
Next
End With
End With
'~~> Show message
MsgBox msg
Reenter:
Application.ScreenUpdating = True
Exit Sub
WhatWentWrong:
MsgBox Err.Description
Resume Reenter
End Sub
这里http://www.cpearson.com/excel/SortingArrays.aspx一看,里面介绍了几乎正是你想要达到的:创建一个新的工作表,排序新表,负荷排序值回到您可以使用的数组中,然后删除临时表。 – Marc
有用的链接,谢谢。 –