【问题标题】:Dynamic Range Setting动态范围设置
【发布时间】:2019-06-26 16:27:55
【问题描述】:

我正在尝试动态设置范围。但是,我遇到了一些错误:

赋值左侧的函数调用必须返回 Variant 或 Object。

Sub calDailyGC()

    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    Dim Rng As Range

    numGC = Cells(46, 7).Value
    numDays = Cells(47, 7).Value

    Debug.Print numGC
    Debug.Print numDays

    For k = 3 To numDays + 1
        Set Rng = Range(Cells(k, 12), Cells(k, 9999))
        sumRate = 0
        For j = 1 To numGC
            rate = Application.WorksheetFunction.Large(Rng, j)
            sumRate = sumRate + rate
        Next j
        avgGCRate = sumRate / numGC
    Next k
    Debug.Print avgGCRate

End Sub

【问题讨论】:

  • k 没有定义,所以k0 并且行0 不存在所以Cells(k, 12) 失败。您图片中的代码不是您问题中的代码!清楚我们在说什么。 • 还要指定您的单元格和范围在哪个工作表中类似于Worksheets("Sheet1").Range(…),否则Excel 无法知道并猜测(并且可能猜测错误)。 • 如果你转ScreenUpdating = False,别忘了最后转TrueCalculation = xlCalculationManual 也是如此,您可能希望将其转回自动模式。
  • 确保你使用Option Explicit并正确声明所有你的变量。
  • @Pᴇʜ 感谢您的帮助!我在更新的代码中解决了你的一些 cmets。我遇到了一个新问题......
  • 错误在哪一行?请考虑我在 cmets 中提到的其他问题。所有这些对于生成可靠的代码都非常重要。
  • 请为每个范围对象指定工作簿和工作表。否则 VBA 将引用活动工作簿和 -sheet

标签: excel vba


【解决方案1】:

赋值左侧的函数调用必须返回 Variant 或 Object。

rate = Application.WorksheetFunction.Large(Rng, j)

不要使用Rate。它是 VBA 中的保留字。你可以阅读Ratehere

改成说

LargeVal = Application.WorksheetFunction.Large(Rng, j)

【讨论】:

  • 非常感谢!这行得通,我想检查一下: Rng = Range(Cells(k, 12), Cells(k,9999)) 我只需要偶数列,我应该怎么做?又名 Range(Cells(k,12), Cells(k, 14), ..., Cells(k,9998))
  • For k = 3 To numDays + 1 如果你想要偶数然后从4 开始而不是3 并使用STEP
  • 更多的是 Rng = Range(.Cells(k, 12), .Cells(k, 9999)),我需要在其中制作 12、14、16、...、9998
  • 啊,你的意思是列...在这种情况下,请为此发布一个单独的问题,我们可以在那里处理该查询:)
  • 干杯(:我已经和你分享了这个问题:stackoverflow.com/questions/56770247/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多