【问题标题】:Excel VBA For Each Loop每个循环的 Excel VBA
【发布时间】: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


【解决方案1】:

a) 如果单元格 A1 = 5000 和单元格 A2 = 3000,会发生什么?将执行哪个代码块?有冲突吗?

b) 您已将范围用作变量。使用不同的名称。 “范围”必须是保留字。必须使用带有 R 大写字母的 Range 来将某个名称声明为 Range 对象。

c) 我注意到一个 A43:A4。我猜这是一个错字 - 应该是 A3:A4?

【讨论】:

  • 我修复了代码:A 列中将有一个 =Sum 公式,它基本上只是对具有代码中公式的可见 B 列的值求和。 G5 是我将更改数字的地方,这将反过来更改 B 列中公式的结果值,这反过来又会更改 A 列中的值,并有效地更改范围正在查看的值。我只是以“范围”作为变量为例,在原始帖子中固定。
猜你喜欢
  • 2018-04-05
  • 1970-01-01
  • 2014-03-22
  • 2013-08-07
  • 2021-07-05
  • 2016-02-26
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多