【问题标题】:Run Time error 13: Type Mismatch on code when I add certain lines of code运行时错误 13:当我添加某些代码行时,代码类型不匹配
【发布时间】:2016-11-19 03:53:38
【问题描述】:

所以我的代码工作正常,直到我尝试添加嵌套的 for 循环,然后我开始收到运行时错误 13。错误所在的行被 *** 包围

这是我之前的代码:

Dim LR As Long
Dim ColLtr As String
Dim Ave As Double
Dim STDev As Double

For i = 1 To DateTime_Column

ColLtr = Replace(Cells(1, i).Address(True, False), "$1", "")
    Ave = Application.Average(Range(ColLtr & "1:" & ColLtr & LR)) ' Based on     all values
    STDev = Application.STDev(Range(ColLtr & "1:" & ColLtr & LR)) ' Based on     all values

Next i

下面是出现错误的代码:

Dim LR As Long
Dim ColLtr As String
Dim Ave As Double
Dim STDev As Double
Dim q As Integer
ReDim Range(LR1) As Variant

For i = 1 To DateTime_Column

Sheets(1).Select

ColLtr = Replace(Cells(1, i).Address(True, False), "$1", "")
 ***Ave = Application.Average(Range(ColLtr & "2:" & ColLtr & LR))*** ' Based on all values

For q = 1 To LR1
Range(q) = WorksheetFunction.Abs(Cells(q + 1, ColLtr) - Cells(q, ColLtr))
Next q

下一个

我最初的想法是LR很长,所以我尝试将其更改为字符串数据类型,但也没有用,也许它与for循环有关?

【问题讨论】:

  • 我在代码中的任何地方都没有看到用实际字符串定义的LR
  • 你需要添加 ave = Application.Average(Sheets(1).Range(ColLtr & "2:" & ColLtr & LR)),没有 sheet(1) 给出错误!

标签: vba excel for-loop runtime-error


【解决方案1】:

在 VBA 中从单元格运行公式或进行赋值时,Run Time error 13 的最常见原因是单元格中有错误值。此外,当您使用Average 时,如果给定范围内的所有单元格都是空白的,您将收到相同的错误。

像这样测试:

If Not IsError(Application.Average(Range(ColLtr & "2:" & ColLtr & LR))) Then
    ave = Application.Average(Range(ColLtr & "2:" & ColLtr & LR))
Else
    MsgBox "Error value in cells"
End If

【讨论】:

  • AGGREGATE(1, 6, ) 将忽略错误,但仍需要至少一个具有值的单元格。
  • 总是有一些小警告。这就是保持乐趣的原因。因此我并不总是使用最常见的。
  • 这似乎可行,但现在我在嵌套 for 循环中的代码中遇到了同样的错误。
【解决方案2】:

Range object 之类的名称改用其他名称绝不是一个好主意。在您的情况下尤其如此,因为您决定在重新定义 Range 时允许 ActiveSheet property 成为默认 Range.Parent property

Dim LR As Long, LR1 As Long, q As Long
Dim Ave As Double, STDev As Double
ReDim vals(LR1) As Variant


With Sheets(1)
    For i = 1 To DateTime_Column
        LR = .Cells(.Rows.Count, i).End(xlUp).Row
         Ave = Application.Average(.Range(.Cells(2, i), .Cells(LR, i))) ' Based on all values

        For q = 1 To LR1
            vals(q) = WorksheetFunction.Abs(.Cells(q + 1, i) - .Cells(q, i))
        Next q
    Next i
End With

我删除了整个 ColLtr 业务,并为所有 Range.Cells 对象。

您仍然需要对 vals 数组做一些事情,并确保正确定义了 LR1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多