【问题标题】:Run-Time Error 13: Type Mismatch运行时错误 13:类型不匹配
【发布时间】:2013-12-04 18:56:48
【问题描述】:

我在以下宏上收到“运行时错误 13:类型不匹配”(调试行突出显示)。我的目标是检查第 1 行是否有任何大于 1 的数量,以警告用户时钟正在为活动运行,然后退出宏。第 1 行中的数字表示用户已经启动了一项活动的时钟,但时钟一次只能运行一项活动。我尝试在第 1 行中使用“ON”...将 StartOnRow 作为文本进行调暗...但我得到了同样的错误。非常感谢任何帮助!

Sub StartRunningTimer()
        Dim StartOnRow As Integer
        **StartOnRow = Range("a1:bj1")**
        If StartOnRow > 1 Then
        MsgBox ("Please stop the previously started activity")
        If StartOnRow = True Then Exit Sub
        End If
    Worksheets("TimeElapsed").Activate
    nr = ThisWorkbook.Sheets("TimeElapsed").Cells(Rows.Count, 1).End(xlUp).Row + 1
    Cells(nr, 1) = Format(Now(), "m.d.yy h:mm:ss")
        If Not Started Then
        myTime = Time
        Started = True
    Else
        Worksheets("TimeElapsed").Cells(1, 1).Value = "ON"
        Worksheets("Dashboard").Cells(64, 2).Value = "PRESS IS RUNNING"
        Worksheets("Dashboard").Cells(65, 2).Value = "Time Started:  " & Format(Now(), "hh:MM:ss")
        Worksheets("Dashboard").Cells(74, 2).Value = ""
        Worksheets("Dashboard").Cells(75, 2).Value = ""
        Worksheets("Dashboard").Activate
    End If
End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我认为您需要Set 声明:

    Set StartOnRow = Range("a1:bj1")
    

    另外,Range 返回的是 Range 对象,而不是整数:

    Dim StartOnRow AS Range
    Set StartOnRow = Range("a1:bj1")
    

    【讨论】:

    • 是的,这也是我的第一反应,但这与 OP 的其余代码不符。我不得不承认这真的不清楚。
    【解决方案2】:

    如果您要在其中任何一个单元格中查找大于 1 的值,只需在 BK1 中使用一个辅助单元格来汇总整行。检查那个单元格,StartOnRow = Range("BK1").Value

    至于你的问题,@roryap 是正确的。当像这样使用Range 时,你得到一个对象并且需要set 但这仍然没有得到你想要的,因为你需要遍历范围然后找到一个> 1的值。

    Dim StartOnRow as Range
    Dim cellCheck as Range
    
    Set StartOnRow = Range("A1:BJ1")
    
    For Each cellCheck in StartOnRow
         if cellCheck.value > 1 Then
              'Stop
              'Exit Sub
         End if
    Next cellCheck
    

    【讨论】:

      最近更新 更多