【问题标题】:"Object Variable or With Block Variable not Set"“未设置对象变量或块变量”
【发布时间】:2015-11-03 02:46:25
【问题描述】:

我正在尝试遍历工作簿,获取一些值并存储在不同的工作表中。下面是我的代码。不断获取 VBA 对象变量或块变量未设置错误。

谁能帮我找出哪里错了?

Sub analysis()

Dim i As Integer
Dim ws As Worksheet

For i = 4 To 197
    ws = ActiveWorkbook.Sheets(i)
    ws.Cells(1, 9) = ìstandardevî
    ws.Cells(2, 9) = Application.WorksheetFunction.StDev(Range("D3:D34"))
    ActiveWorkbook.Sheets(4).Cells(2, 1) = ws.Cells(2, 1)
    Sheets(4).Cells(2, 2) = ws.Cells(3, 8)
    Sheets(4).Cells(2, 3) = ws.Cells(2, 9)
Next i


End Sub

【问题讨论】:

    标签: excel vba loops


    【解决方案1】:

    For/Next 循环内的第一行是这样的:

    ws = ActiveWorkbook.Sheets(i)
    

    改成这样:

    Set ws = ActiveWorkbook.Sheets(i)
    

    【讨论】:

    • 在 VBA 中,任何不是原始类型(数字、字符串、日期等)的变量都必须是“SET”,而不仅仅是分配给。很长一段时间后,每当我回到 VBA 时,我总是会忘记这一点。
    • 您也可以像这样“将 mySheet 调暗为工作表:设置 mySheet = ActiveWorkbook.Sheets(1)”这样的“内联”集。它对您当前的循环情况没有帮助,但可以派上用场。
    • @CarlFriedRiceGauss 只有对象变量必须设置,并且只有当变量变暗时不使用 New 关键字时。您的断言过于宽泛。
    • @CarlFriedRiceGauss 在技术上不是“内联”,因为冒号被解析为新行。为了一般的可读性,我也建议反对它:)
    • @ExcelHero 我认为所有不是原始的东西都是 VBA 中的对象。不是这样吗?
    猜你喜欢
    • 2018-12-11
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多