首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用DateValue()的函数出现类型不匹配错误,如何排除故障?

使用DateValue()的函数出现类型不匹配错误,如何排除故障?
EN

Stack Overflow用户
提问于 2013-07-31 07:03:46
回答 1查看 6.5K关注 0票数 1

警告:我是菜鸟。

我已经编写了一个Sub来查找带有红色文本的单元格并对其进行修改。

@ThinkerIV给了我一个很棒的函数,可以放入一个单元格,并将公式拖到相邻的单元格中,但由于要处理的工作表数量太多,这将不起作用。所以我写了我的Sub,调用他的函数(参见下面的代码)。我给它传递了一个单元格的范围,所以在我看来它应该可以工作了?

但是,它一直在函数调用DateValue()的那一行抛出类型不匹配(运行时错误代码13)!当我在编辑器中将鼠标悬停在传递的范围上时,它显示的值为1(这是它引用的单元格中的数字),但我不知道这是单元格的内容还是显示的其他值1。

所以,我真的不知道如何找出发生这种情况的确切原因。是不是我传递的范围不是正确的类型?请告诉我为什么这个代码不能工作!

我尝试将该行更改为其下面的注释行(以及其他一些盲目猜测的更改),但出现了相同的错误。

提前感谢!

代码语言:javascript
运行
复制
    Sub redTextToRealDates()

    Dim dateTemp As Date
    Dim redCell As Range
    Dim foundCell As Range
    Dim thisSheetsRange As Range
    Dim busyCell As Range
    Dim redTextCells As Range
    Set thisSheetsRange = ActiveSheet.usedRange

    'Build a range containing all the cells in a sheet containing red text.
    '  well... all cells formatted to HAVE red text, anyway.
    '  Anyone want to tell me how to write this to skip empty cells?
    '  Because I don't need to grab empty cells into this range...

    For Each busyCell In thisSheetsRange
        If (busyCell.Font.ColorIndex()) = 3 Then
            If redTextCells Is Nothing Then
            Set redTextCells = busyCell
            Else: Set redTextCells = Union(redTextCells, busyCell)
            End If
        End If
    Next busyCell

    'Change unknown format cells to date cells populated with concantenated
    'string of original contents and the active sheet's name.

    For Each foundCell In redTextCells
        foundCell.NumberFormat = "@"
        foundCell = GetConcantDate(foundCell)

    Next foundCell

    redTextCells.NumberFormat = "dd/mm/yy"
    On Error Resume Next


    End Sub


    Function GetConcantDate(rng As Range) As Date
        'Original code supplied by ThinkerIV on StackOverflow.com
        Dim dtTemp As Date
        dtTemp = DateValue(rng.Range("A1").Value & " " & rng.Parent.Name)
         'dateTemp = DateValue(foundCell.Value & " " & ActiveSheet.Name)
        GetConcantDate = dtTemp
    End Function

编辑我还不能发布我自己的答案,所以我添加了这个解决方案:

将数据馈送到Format()时,第一个格式化为红色的单元格的内容不是文本形式。我没有采取任何方法来确保我传递了正确的数据类型。因此,在将单元格传递给函数之前,将单元格格式化为文本(foundCell.NumberFormat = "@")的行将修复它。

当我将代码复制/粘贴到问题中时,解决方案实际上已经写好了--我只是没有意识到它已经修复了它,因为另一个Sub上的另一个错误。(我是一个新手,在处理多个subs中的多个错误时感到困惑)我以为我已经用新的行再次尝试过了,但没有,所以我仍然认为它不起作用。

感谢所有帮助我的人。我现在觉得自己有点傻,发现它就是这样的。希望你能原谅我的新手失误--编辑器里有太多的Sub和函数,我感到“头晕”……至少我可以发布一个解决方案,以防其他菜鸟需要它!

EN

回答 1

Stack Overflow用户

发布于 2013-07-31 08:35:00

好的,我认为这里有两件事。首先,DateValue函数接受日期的字符串表示,例如"01/01/2013",当您传递一个范围中的excel日期时,您传递的是一个数字,如41275。这将抛出运行时错误13。

但是,如果你已经有了一个日期,为什么还要转换它呢?您似乎希望将所有红色单元格转换为日期+工作表名称。要做到这一点,你必须有字符串,例如"01/01/2013 Sheet1",所以你不能在这里使用DateValue。相反,也许可以尝试如下所示:

代码语言:javascript
运行
复制
Public Function GetConcatDate(rng As Range) As String
    Dim dtTemp As String
    dtTemp = Format(rng.Range("A1").Value, "dd/mm/yyyy") & " " & rng.Parent.Name
    GetConcatDate = dtTemp
End Function
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17958975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档