【问题标题】:VBA - Loop Through Worksheets to Add Months of Year to Combo BoxesVBA - 循环工作表以将一年中的月份添加到组合框
【发布时间】:2017-12-07 02:26:02
【问题描述】:

我在 20 个工作表上有 Private Sub 组合框。我试图在组合框中预加载一年中的几个月,但我似乎无法让它工作。我现在的代码有什么问题?它仅将 12 个月之类的 120 次添加到第一个组合框中:

Sub WorkBook_Open()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
        ActiveSheet.ComboBox1.AddItem "January"
        ActiveSheet.ComboBox1.AddItem "February"
        ActiveSheet.ComboBox1.AddItem "March"
        ActiveSheet.ComboBox1.AddItem "April"
        ActiveSheet.ComboBox1.AddItem "May"
        ActiveSheet.ComboBox1.AddItem "June"
        ActiveSheet.ComboBox1.AddItem "July"
        ActiveSheet.ComboBox1.AddItem "August"
        ActiveSheet.ComboBox1.AddItem "September"
        ActiveSheet.ComboBox1.AddItem "October"
        ActiveSheet.ComboBox1.AddItem "November"
        ActiveSheet.ComboBox1.AddItem "December"
Next ws
End Sub

【问题讨论】:

  • 试试ws.ComboBox1.AddItem "January"
  • 给我“找不到方法或数据成员”错误
  • 您在每个工作表上都没有 ComboBox1,至少不在该名称下。
  • 它们都是 ComboBox1 我正在从属性对话框中复制/粘贴名称 ComboBox1
  • 你也可以这样做for i=1 to 12:ws.combobox1.additem format(dateserial(2017,i,1),"mmmm"): next i

标签: vba excel combobox


【解决方案1】:

发生这种情况是因为您正在使用 ws 变量循环浏览工作表,但是对于每个工作表,您都将月份添加到当前的 ActiveSheet。但是,您可以在第一行 ActiveSheet.Combobox... 之前执行 ws.Activate - 这只是一种糟糕的做法(请参阅 how to avoid Select / Activate

不好的例子:

Sub WorkBook_Open()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
   ws.Activate
   ActiveSheet.ComboBox1.AddItem "January"
   ActiveSheet.ComboBox1.AddItem "February"
   '....
Next ws
End Sub

最好使用ws 变量,然后通过OLEObjects 集合访问控件。

好例子:

Option Explicit
Private Sub Workbook_Open()
Dim ws As Worksheet
Dim i As Integer

For Each ws In ThisWorkbook.Worksheets
    With ws.OLEObjects("Combobox1").Object
        For i = 1 To 12
            .AddItem Format(DateSerial(2017, i, 1), "mmmm") 'as per comment!
        Next i
    End With
Next ws
End Sub

【讨论】:

  • 就是这样。太棒了!
  • 不客气。顺便提一句。请记住,这对于没有“ComboBox1”对象的工作表会出错,因此您可能需要添加一些检查和/或错误处理。
猜你喜欢
  • 2016-10-30
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 2020-10-22
  • 2019-04-15
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多