【问题标题】:Can I reduce this with For/Next Loop in VBA我可以用 VBA 中的 For/Next 循环来减少它吗
【发布时间】:2019-08-17 21:23:11
【问题描述】:

我觉得应该有一种方法可以通过 for next 循环来增加它。我想根据 C36 中的单元格值使形状可见。有没有办法为每次迭代增加形状名称以及值?我想使用 100 个这样的椭圆形,所以我希望这样的东西会起作用。或者,当然还有其他想法。

大量的代码:

Me.Shapes("OVAL 1").Visible = Range("C36").Value > 0 Me.Shapes("OVAL 2").Visible = Range("C36").Value > 1 Me.Shapes("OVAL 3").Visible = Range("C36").Value > 3 等等……

希望是这样的:

Private Sub Worksheet_Calculate()

Dim i as Integer, x as Integer
 For i = 1 to 100
  For x - 0 to 99
     Me.Shapes("OVAL " & i).Visible = Range("C36").Value > x
  Next x
 Next i
End Sub`

【问题讨论】:

  • 注意:您必须在这一行中遇到编译时错误 - For x - 0 to 99。将- 替换为=
  • 我不明白你为什么要嵌套 2 个循环。对于每个 i,Visible 属性的唯一有意义的分配是 x = 99 处的最后一个,所以本质上,您的测试始终是 Range("C36").Value > 99
  • x - 0 - 99 是一种类型。感谢您指出了这一点。我不确定如何增加对象和值。谢谢大家!

标签: excel vba


【解决方案1】:

我认为您试图仅显示 C36 处的值大于其数字后缀减一的那些形状。如果是这样,你可以沿着这些路线走:

Option Explicit

Private Sub Worksheet_Calculate()
    Dim i As Integer

    For i = 1 To 100
        'Shape will be visible if a value at C36 on this worksheet is larger
        'than (the shape's index suffix minus one).
        Me.Shapes("OVAL " & i).Visible = Me.Range("C36").Value > (i - 1)
    Next
End Sub

为了获得更高的性能,请将 C36 处的值读入 double 类型的变量,循环之前,并在循环中使用它。

【讨论】:

  • 太棒了!这正是我一直在寻找的。我在上面的代码中添加了一个 msgbox 来查看 x & i 的值,它在将 i 步进到 2 之前将 x 递增到 100。x - 0 - 100 是一个错字。感谢您指出古尔曼
猜你喜欢
  • 2022-12-04
  • 2017-07-22
  • 2016-06-19
  • 2012-09-30
  • 1970-01-01
  • 2019-11-03
  • 2023-03-19
  • 2013-06-19
  • 2021-06-12
相关资源
最近更新 更多