【问题标题】:Run time error 13 on For loopFor循环上的运行时错误13
【发布时间】:2018-02-02 10:00:35
【问题描述】:

我正在尝试在我的用户界面中使用组合框,但如果没有一个选项对用户有好处,他们可以输入它,但如果他们输入了某些内容,我想保存它,以便下次它出现在列表。我尝试了以下方法:

For i = Range("O3") To Range("O3").End(xlDown)
    If Not i.Value = ComboType.Value Then
        Range("O3").End(xlDown) = ComboType.Value
    End If
Next i

但这在第一行给出了上述错误。我对 VBA 中的 For 循环不是很熟悉,所以我希望有人能帮助我。

【问题讨论】:

  • 该范围是数据库中用于声明组合框中内容的最后一个值。它应该是 Range("O3").End(xlDown).Offset(1,0) 公平的,所以它不会覆盖最后一个值。我不确定你的错误来自哪里,对我来说第一行被 VBA 突出显示。

标签: vba excel user-interface for-loop


【解决方案1】:

这是使for-eachO3循环到O3之后值的最后一个单元格的方法:

Public Sub TestMe()    
    Dim myCell  As Range  
    Dim ws      As Worksheet

    Set ws = Worsheets(1)
    With ws
        For Each myCell In .Range("O3", .Range("O3").End(xlDown))
            Debug.Print myCell.Address
        Next myCell    
    End with

End Sub

声明工作表也是一个好习惯,否则您将始终使用ActiveWorkbookActiveSheet

【讨论】:

  • 毕竟如此明显!谢谢!
  • 因为否则您将始终使用 ActiveWorkbook 的 ActiveSheet
  • 感谢您的建议,在这种情况下,这并不重要,因为我的提交按钮会触发始终在同一页面上的宏。
  • @K.Robert - 是的,在这种情况下没关系。但总的来说,这是一个很好的做法。
  • 注意不要修改 For Each 循环内的范围,因为这会改变最终值并弄乱迭代。当然,除非那是你想要的!我这样说是因为在编码循环时,每次都会计算 .Range.End
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
  • 1970-01-01
相关资源
最近更新 更多