【问题标题】:excel vba: Range gives Argument Not Optional error messageexcel vba:范围给出参数不是可选的错误消息
【发布时间】:2013-12-20 15:10:37
【问题描述】:

在 excel vba 中,我尝试选择从单元格“O2”开始的一系列值,(O 来自 Oyster)一直到工作表的末尾, 我正在尝试:

 Range("O2", Range.End(xlDown))

但是 Argument Not Optional 失败了。我究竟做错了什么? 我正在使用 Excel 2010。

【问题讨论】:

    标签: excel vba range


    【解决方案1】:

    不要使用xlDown 声明你的对象然后使用它。

    使用这个

    Option Explicit
    
    Sub Sample()
        Dim ws As Worksheet
        Dim LRow As Long
        Dim rng As Range
    
        '~~> Change this to the relevant sheet name
        Set ws = ThisWorkbook.Sheets("Sheet1")
    
        With ws
            '~~> Find last row in Col O which has data
            LRow = .Range("O" & .Rows.Count).End(xlUp).Row
    
            '~~> This is your range
            Set rng = .Range("O2:O" & LRow)
    
            With rng
                '~~> Whatever you want to do
            End With
        End With
    End Sub
    

    【讨论】:

      【解决方案2】:

      要选择从 O2 到该列中最后一个填充单元格的范围,您可以使用:

      Range("O2", Range("O2").End(xlDown)).Select
      

      但这有一些问题,包括它会在任何空白处“停止”,除非绝对必要,否则您应该avoid using Select。此外,您应该养成限定范围的习惯,例如,指定它们在哪个工作表中。鉴于所有这些,我建议您这样做,假设您想将范围内的单元格变为红色:

      Sub test()
      
      Dim LastRow As Long
      Dim ws As Excel.Worksheet
      
      Set ws = ActiveSheet
      With ws
          LastRow = .Range("O" & .Rows.Count).End(xlUp).Row
          .Range("O2:O" & LastRow).Interior.Color = vbRed
      End With
      End Sub
      

      【讨论】:

      • + 1 :) xldown 的另一个问题是,如果 O2 是唯一有数据的单元格,那么 xldown 将选择整个范围,直到 Excel 行的末尾。
      • 确实如此。也给你+1。看起来我的速度几乎一样快;)。
      • 你的三重帽子让你慢下来:)
      【解决方案3】:

      也许你需要

      Range("O2", Range("O2").End(xlDown)).Select
      

      ?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-02
        • 2013-03-08
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多