2014-09-11 125 views
1

所以我有一個循環檢查列中的每個單元格,並找到一個特定的日期(目前是前一週的星期一)。我的代碼現在確實正確地選擇他們,但我希望它保持先前的選擇那麼到底該規範的所有細胞都選擇如何添加到Excel中的當前單元格選擇VBA

Public Function LastMonday(pdat As Date) As Date 
     LastMonday = DateAdd("ww", -1, pdat - (Weekday(pdat, vbMonday) - 1)) 
End Function 

Sub Macro2() 

Macro2 Macro 



Dim rng As Range 
Dim curCellValue As String 
Dim mondayStr As String 

mondayStr = Format(LastMonday(Date), "dd/mm/yyyy") 

Set rng = Range(ActiveSheet.Range("E2"), ActiveSheet.Range("E2").End(xlDown)) 

For Each Cell In rng 
    curCellValue = Cell.Value 
    If curCellValue = mondayStr Then Cell.Select 
Next Cell 

End Sub 

作爲獎勵,該功能更改爲不同的一天上週我是否會簡單地將vbMonday更改爲vbTuesday等?我承認我不太瞭解VBA,大部分情況都是從這裏開始的。

回答

10

最好的方法是使用Union方法將所有單元格存儲在一個範圍內。我也不推薦使用.Select。您可能想看到THIS

修改代碼添加此代碼。

Dim MySel As Range 

For Each cell In Rng 
    If cell.Value = mondayStr Then 
     If MySel Is Nothing Then 
      Set MySel = cell 
     Else 
      Set MySel = Union(MySel, cell) 
     End If 
    End If 
Next cell 

If Not MySel Is Nothing Then 
    With MySel 
     '.Select 
     '~~> Do something 
    End With 
End If 

還有一件事......請注意xlDown應儘可能避免。你可能想看到THIS

+0

工作就像一個魅力,也用你的鏈接建議的方法取代xlDown。 – 2014-09-11 11:49:26

相關問題