子列表/多层列表框?也正确编码这个循环

时间:2016-06-21 13:03:36

标签: vba excel-vba excel

所以我现在有一个列表框,其中包含1月至12月的月份。我想知道是否有办法让它成为子列表?因此,如果他们喜欢检查Q1,那么将检查1月至3月。

我现在也有这个代码:

  If audienceListbox.Selected(1) = True Then
  .Cells(iRow, 4).Value = "Yes"
  Else: .Cells(iRow, 4).Value = "No"
  End If
   If audienceListbox.Selected(2) = True Then
  .Cells(iRow, 5).Value = "Yes"
  Else: .Cells(iRow, 5).Value = "No"
  End If
   If audienceListbox.Selected(3) = True Then
  .Cells(iRow, 6).Value = "Yes"
  Else: .Cells(iRow, 6).Value = "No"
  End If
   If audienceListbox.Selected(4) = True Then
  .Cells(iRow, 7).Value = "Yes"
  Else: .Cells(iRow, 7).Value = "No"
  End If
   If audienceListbox.Selected(5) = True Then
  .Cells(iRow, 8).Value = "Yes"
  Else: .Cells(iRow, 8).Value = "No"
  End If
   If audienceListbox.Selected(6) = True Then
  .Cells(iRow, 9).Value = "Yes"
  Else: .Cells(iRow, 9).Value = "No"
  End If
   If audienceListbox.Selected(7) = True Then
  .Cells(iRow, 10).Value = "Yes"
  Else: .Cells(iRow, 10).Value = "No"
  End If
   If audienceListbox.Selected(8) = True Then
  .Cells(iRow, 11).Value = "Yes"
  Else: .Cells(iRow, 11).Value = "No"
  End If
   If audienceListbox.Selected(9) = True Then
  .Cells(iRow, 12).Value = "Yes"
  Else: .Cells(iRow, 12).Value = "No"
  End If
   If audienceListbox.Selected(10) = True Then
  .Cells(iRow, 13).Value = "Yes"
  Else: .Cells(iRow, 13).Value = "No"
  End If
   If audienceListbox.Selected(11) = True Then
  .Cells(iRow, 14).Value = "Yes"
  Else: .Cells(iRow, 14).Value = "No"
  End If
   If audienceListbox.Selected(12) = True Then
  .Cells(iRow, 15).Value = "Yes"
  Else: .Cells(iRow, 15).Value = "No"
  End If

有没有更好的方法来编写这个循环?现在我在第12个选定的属性上收到错误,说它找不到它,即使我的列表中有12个选项(1月到12月)。

抱歉,我昨天刚刚开始使用VBA,所以我还在搞清楚基础知识。

1 个答案:

答案 0 :(得分:0)

这是重写的一个选项。

至于将列分组在一起,看起来你觉得这些是由宿舍(日历)完成的吗?

如果是,您可以选择按季度进行选择。如果需要自定义分组,请将分组添加到二维数组并循环遍历它们。

Public Sub Tester()
    Dim MonthNumber  As Byte
    Dim ColumnNumber As Integer: ColumnNumber = 4

    For MonthNumber = 0 To 11
        If audienceListbox.Selected(MonthNumber) Then
            Cells(iRow, ColumnNumber).Value = "Yes"
        Else
            Cells(iRow, ColumnNumber).Value = "No"
        End If
        'Increase the column Index for each time through the loop
        ColumnNumber = ColumnNumber + 1
    Next
End Sub