如何修复范围值的运行时错误 13 不匹配?

How do I fix a run-time error 13 mismatch on a range value?

提问人:Yodelayheewho 提问时间:11/16/2023 最后编辑:Raymond ChenYodelayheewho 更新时间:11/18/2023 访问量:46

问:

以下代码为我每次单击命令按钮以保存顺序/行时创建/更新日期和时间戳。“TIMESTAMP”是工作表中名为“MASTER”的命名区域(第 106 列)。代码在工作表对象“MASTER”中输入。 我试图将 Dim r As Range 更改为 Dim r As String,因为工作表中的第 106 列格式为文本,但这没有帮助。我还尝试了 Debug.Print 错误行,但我一定没有这样做,因为我在即时窗口中没有得到任何结果。

但是,我收到运行时错误“13” - 类型不匹配。

  1. 打开用户表单并搜索订单/行
  2. 单击保存命令按钮
  3. 弹出运行时错误,所以我单击“结束”,这将关闭用户窗体
  4. 再次打开用户窗体
  5. 搜索相同的顺序/行
  6. 单击保存命令按钮
  7. 不显示错误消息

提前感谢您的帮助。

'***TIMESTAMP***
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range
    Dim Intersection As Range
    Dim cell As Range
        Set r = Range("TIMESTAMP")
        Set Intersection = Intersect(r, Target)

            If Intersection Is Nothing Then Exit Sub

    Application.EnableEvents = False
        For Each cell In Intersection
            Range(r & cell.Row).Value = Date & " " & Time 'run-time error '13' - Type mismatch
        Next cell
    Application.EnableEvents = True
End Sub

我正在编辑这篇文章,以展示我尝试过但没有成功的东西。

  1. 修订版:将交集调暗为字符串
  2. 编译错误:需要对象
  3. 错误线:设置交集 = 相交(r,目标)
  4. 修订版:删除了 Set Intersection = Intersect(r,Target) 中的“Set”
  5. 编译错误:类型不匹配
  6. 错误行:如果 Intersect 为 Nothing Then Exit Sub
  7. 修订版:将交叉点调暗为变体
  8. 运行时错误“91”:对象变量或未设置块变量
  9. 修订版:设置交集 = 相交(r,目标)
  10. 让我回到原来的问题 - 运行时错误“13” 在线类型不匹配:Range(r & cell.行)。值 = 日期 & “ ” & 时间
Excel VBA 运行时错误 命名范围

评论

0赞 sous2817 11/17/2023
这部分是不对的:Range(r & cell.行)。价值。'r' 已经是一个范围,而不是 Range() 对象的第一个参数的有效输入。您只是想将当前日期和时间放入“TIMESTAMP”命名范围的最后一行吗?
0赞 Yodelayheewho 11/17/2023
是的。TIMESTAMP 是列 106 的命名范围。例如,如果我在第 23 行中编辑销售订单并单击“保存”,则我希望在第 23 行/第 106 列中显示“保存”的日期和时间。
0赞 sous2817 11/17/2023
啊,我明白了。等一下,让我调整我刚刚发布的代码。

答:

0赞 sous2817 11/17/2023 #1

可能有几种方法可以解决这个问题,但这似乎对我有用:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lr As Long
    Dim a As Range
    
    Application.EnableEvents = False
        Sheets("MASTER").Cells(Target.Row, Range("TIMESTAMP").Column).Value = Date & " " & Time
        lr = Sheets("MASTER").Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Set a = ThisWorkbook.Names("TIMESTAMP").RefersToRange.CurrentRegion
        Set a = Range("TIMESTAMP").Resize(lr)
        a.Name = "TIMESTAMP"
    Application.EnableEvents = True
End Sub

这应该更新命名范围“TIMESTAMP”,以包含已更改的任何行。

应更新工作表引用以匹配工作簿。如果您有任何问题或未按预期工作,请告诉我。

祝你好运!

评论

0赞 Yodelayheewho 11/18/2023
您的代码有效。非常感谢!如果我使用工作表名称“MASTER”而不是“Sheet1”,您将如何编辑它?
0赞 sous2817 11/18/2023
@Yodelayheewho更新了代码,使其位于“MASTER”表上。很高兴它有帮助!
0赞 Yodelayheewho 11/20/2023
完善!再次感谢!