【发布时间】:2014-01-25 06:19:07
【问题描述】:
我在 for-each 循环中遇到了一些麻烦,其中包含 If 语句。
代码如下:
Private Sub Worksheet_Calculate()
Dim rng1 As range
Dim cell1 As range
Set rng1 = range("A1")
Application.EnableEvents = False
For Each cell1 In rng1
While rng1.Rows.Count > 1
If cell1.Value >= 6000 And cell1.Value < 8000 Then
range("2:5").EntireRow.Hidden = False
range("B1:B5").Formula = "=(CEILING($A$10*(1+$A$11+$A$12),5))/4"
Set rng1 = rng1.Resize(4)
ElseIf cell1.Value >= 4000 And cell1.Value < 6000 Then
range("2:3").EntireRow.Hidden = False
range("4:5").EntireRow.Hidden = True
range("B1:B4").Formula = "=(CEILING($A$10*(1+$A$11+$A$12),5))/3"
range("B5:B5").ClearContents
Set rng1 = rng1.Resize(3)
ElseIf cell1.Value >= 2000 And cell1.Value < 4000 Then
range("2:2").EntireRow.Hidden = False
range("3:5").EntireRow.Hidden = True
range("B1:B3").Formula = "=(CEILING($A$10*(1+$A$11+$A$12),5))/2"
range("B4:B5").ClearContents
Set rng1 = rng1.Resize(2)
ElseIf cell1.Value >= 0 And cell1.Value < 2000 Then
range("2:5").EntireRow.Hidden = True
range("B1:B1").Formula = "=(CEILING($A$10*(1+$A$11+$A$12),5))"
range("B2:B5").ClearContents
End If
Wend
Next
Application.EnableEvents = True
结束子
基本上我希望它这样做,但它不能正常工作: 它看起来是一个范围。如果该范围的值介于 4000 和 6000 之间,则它会取消隐藏 3 行,隐藏第 4 行,将 3 个可见行设置为等于公式,并将 3 行之间的范围值平分,清除隐藏行的内容,然后设置它查看的原始范围等于可见行的范围(这是我认为我的逻辑被挂断的地方)。任何帮助将不胜感激。
【问题讨论】:
-
重新分配
range是个坏主意。 -
如果你的范围是 C1 那么循环的意义何在?
-
抱歉范围应该从 A1 开始,然后更改为可见 A 行的范围。 Bathsheba,您将如何修改代码以使每个循环所查看的范围始终等于基于 if 语句的可见行的范围?
-
将
.Offset()和/或.Resize()与Range("A1")一起使用以获得对所需单元格的引用。 -
感谢 ja72,它解决了我的范围重新分配问题,但我仍然无法正确处理它,我认为我放置 set range = range.Resize(.. .) 在循环中,我也觉得我可能需要在某个地方做计数器,有什么想法吗?
标签: vba loops if-statement foreach logic