【问题标题】:Excel VBA : Selecting Sheet based on the Drop down list name. Run time error 9 - Subscript out of range. ErrorExcel VBA:根据下拉列表名称选择工作表。运行时错误 9 - 下标超出范围。错误
【发布时间】:2013-07-16 20:37:48
【问题描述】:

我已经编写了以下代码行,用于根据所选的下拉列表项导航到工作表。它第一次工作但我得到运行时错误 9 - 下标超出范围错误,当我下次尝试这样做时。我在线路中遇到错误
"ActiveWorkbook.Sheets(cboDependentList.Value).Activate"

下面是代码行:

'Populate dependent combo box with appropriate list items                                 
'according to selection in cboCategoryList.
Sub test()                                                   
    Dim rng As Range   
    Dim ws As Worksheet    
    Dim str As String     

    Set ws = Worksheets("Lists")     
    str = cboCategoryList.Value      
    Me.cboDependentList.Clear       

    On Error Resume Next         
    For Each rng In ws.Range(str)        
      Me.cboDependentList.AddItem rng.Value       
    Next rng         

End Sub

Sub cboDependentList_Change()        
      ActiveWorkbook.Sheets(cboDependentList.Value).Activate      
End Sub

Private Sub Worksheet_Activate()         
    'Populate combo box with inventory categories.         
    Dim rng As Range         
    Dim ws As Worksheet        

    Set ws = Worksheets("Lists")         
    Me.cboCategoryList.Clear        

    For Each rng In ws.Range("Category")         
      Me.cboCategoryList.AddItem rng.Value            
    Next rng                      

End Sub             

【问题讨论】:

  • 您是否在激活之前尝试过 msgbox'ing 值?只需在显示错误的行之前放置一个 msgbox(cboDependentList.value) 即可。也许有空格,这就是它显示错误的原因。
  • 是的,我做到了。 Msgbox 根据 Listname 正确显示。但是在 msgbox 之后,会显示相同的运行时错误

标签: excel vba


【解决方案1】:

有时,excel 的调试器不会突出显示实际触发错误的代码行,而是突出显示调用者之一(在调用堆栈中较高的位置)。

在这种情况下,activate 方法可能不会直接导致运行时错误 9 - 下标超出范围错误,但它在子例程 Worksheet_Activate 中的影响可能。我建议您在调用激活的行上设置一个断点,并在调试模式下单步执行代码。如果这不起作用,您可能必须在子例程 Worksheet_Activate 的开头设置断点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多