代码之家  ›  专栏  ›  技术社区  ›  Stay-at-home-dad

excel 2007 vba将项目工作表名称添加到列表框

  •  0
  • Stay-at-home-dad  · 技术社区  · 14 年前

    有一个工作表“仪表板”,有其他工作表,但一些特殊的任务表,可以在书中的任何地方,但总是会发现之间的工作表“TaskNew”和“TaskEnd”。这些特别任务单的数量各不相同。

    在仪表板激活时,希望用所有特殊任务表的名称填充列表框,以便用户可以从下拉列表中选择一个表窗体并导航到该表。

    以下结果导致运行时错误“438”对象不支持此属性或方法:

    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    
    Dim StartIndex As Integer
    Dim EndIndex As Integer
    Dim LoopIndex As Integer
    'Dim sht As Worksheet
    StartIndex = Sheets("TaskNew").Index + 1
    EndIndex = Sheets("TaskEnd").Index - 1
    For LoopIndex = StartIndex To EndIndex
        'SheetsNavigationDropDown.AddItem Sheets(LoopIndex).Name
        'Sheets("Dashboard").ListBox20.AddItem Sheets("Sample").Name
        Sheets("Dashboard").ListBox20.AddItem Sheets(LoopIndex).Name
    Next LoopIndex
    

    我也试过了,只是ListBox20.AddItem。。。但还是不行。是的,ListBox20存在于工作表(“仪表板”)上,是的,我编辑了它的名称以消除空格。

    它阻塞/突出显示了工作表(“仪表板”)。列表。。。。调试时的行。

    思想?

    2 回复  |  直到 14 年前
        1
  •  0
  •   barrowc    14 年前

    不妨先做个健康检查:

    Dim o As OLEObject
    
    Debug.Print "---"
    For Each o In Sheets("Dashboard").OLEObjects
        Debug.Print o.Name & " = " & o.progID
    Next o
    Debug.Print "---"
    

    你应该得到 ListBox20 = Forms.Listbox.1 作为结果之一

        2
  •  0
  •   Stay-at-home-dad    14 年前

    抱歉,回答了我自己的问题,关键是要切换到activex窗体元素而不是常规元素。

    Sheets("Dashboard").TaskSheetsComboBox.Clear
    Dim StartIndex As Integer
    Dim EndIndex As Integer
    Dim LoopIndex As Integer
    StartIndex = Sheets("TaskNew").Index + 1
    EndIndex = Sheets("TaskEnd").Index - 1
    For LoopIndex = StartIndex To EndIndex
        Sheets("Dashboard").TaskSheetsComboBox.AddItem Sheets(LoopIndex).Name
    Next LoopIndex
    
    Private Sub TaskSheetsComboBox_Click()
        Sheets(Sheets("TaskNew").Index + TaskSheetsComboBox.ListIndex + 1).Activate
    End Sub