2014-09-11 127 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

相关问题