이 질문에이어서 Defining a range from values in another range (thanks Siddharth!) 작업을 가장 짧은 날짜 순으로 나열하도록 코드를 편집하고 싶습니다. Siddharth와 간단한 이야기를 나누면서 가장 좋은 방법은 임시 시트를 삭제하기 전에 데이터가 들어있는 임시 시트를 만들고, 도착한 데이터로 정렬하고 메시지 상자를 만드는 것이라고 제안했습니다. 어떤 아이디어를 시작할 것인가? msg 문자열을 새 시트로 내보낼 수 있습니까? 아니면 시트에 저장할 변수가 다른 변수 여야합니까?정렬을위한 임시 시트에 출력 저장
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
유용한 링크, 고마워요. –