首页 > 解决方案 > 具有 3 个嵌套循环的 Excel VBA

问题描述

我想在我的用户窗体中为多个复选框提供来自单元格的标题。因为我不想写下每一个参考,我想使用一个循环。不幸的是,我不知道该怎么做。

我每个工作日有 8 个复选框,总共有 23 个工作日。命名类似于 WD1_1, WD1_2 ... WD1_8, WD2_1, WD2_2 ... WD2_8。

WD1_1 从选项卡“任务”单元格 B2 中获取值。从那以后,它总是+1。

我遇到的问题是,我不能一直循环到 185,因为三件事正在发生变化:计算任务编号和单元格编号,当达到 WD1 中的任务 8 时,向上计数 WD +1 并从 1 重新启动任务编号到 8 并继续计数单元格引用。

我只是在一个实例中做到这一点,例如单元格引用,但不是所有三个都在一起。

这是我必须遍历每个 WD 的任务,但我不知道如何计算工作日以及单元格编号:

 For x = 1 To 23
 For i = 1 To 8
 For y = 2 To 185
        
      If Controls("WD" & x & "_" & i).Caption = "" Then
        Controls("WD" & x & "_" & i).Visible = False
        Else
        Controls("WD" & x & "_" & i).Visible = True
      End If
    
      If Sheets("Tasks").Range("I" & y) = 1 Then
        Controls("WD" & x & "_" & i).Value = True
        Else
        Controls("WD" & x & "_" & i).Value = False
      End If

 Next y, i, x

提前感谢您的帮助!

标签: excelvba

解决方案


找到了答案。我的错误是通过第三个循环。删除第三个循环,然后使用线性函数遍历每一行是正确的方法:

 Dim x As Integer
Dim i As Integer

 For x = 1 To 23
 For i = 1 To 8

      If Controls("WD" & x & "_" & i).Caption = "" Then
        Controls("WD" & x & "_" & i).Visible = False
        Else
        Controls("WD" & x & "_" & i).Visible = True
    End If

    If Sheets("Tasks").Range("I" & (x - 1) * 8 + i + 1).Value = 1 Then
       Controls("WD" & x & "_" & i).Value = True
    Else
      Controls("WD" & x & "_" & i).Value = False
    End If

 Next i, x


推荐阅读