【问题标题】:Run-time error '13': Type mismatch when I input a Range of Cells运行时错误“13”:输入单元格范围时类型不匹配
【发布时间】:2021-03-13 17:18:28
【问题描述】:

我有一个 VBA 代码,它根据部分名称在目录中搜索文件夹。
部分名称在F列,代码返回文件夹名称和文件夹路径。

例如文件夹路径为“C:\Users\Dunelle\Desktop\10001-Rev1

路径的最后一部分 (Rev1) 发生变化,但 10001 保持不变。我需要使用通配符 10001* 执行搜索。

部分名称在 F 列中,当我在 F 列中输入值时,我想在同一行的 A 列中返回带有文件夹名称的搜索,并在同一行的 B 列中返回文件夹路径。

我编写的代码在引用单个单元格时有效。
但是,当我将范围更改为 ("F:F") 时,出现错误 13 类型不匹配错误。

这是我的代码:

Sub SearchName()
    Dim ENumber As Range
    Dim ECell As Range
    Dim I As Integer
    Dim rownumber As Integer
    Dim varDirectory As Variant
    Dim strDirectory As String

    Set ENumber = Range ("F:F")

    rownumber = ENumber.Row

    strdirectory = "C:\Users\Dunelle\Desktop\" & ENumber & "*"
    varDirectory = Dir (strDirectory, vbDirectory)

    For Each ECell In ENumber.Cells
        If ENumber <> "" Then
            Cells(rownumber, 1) = varDirectory
            Cells(rownumber, 2) = strDirectory + varDirectory
            Exit Function
        End If
    Next ECell
End Sub

请帮忙。
谢谢

【问题讨论】:

  • 整列的rownumber 是什么?

标签: excel vba type-mismatch


【解决方案1】:

尝试将范围更改为已定义的范围,如下所示:

Set ENumber = Range("F1:F10")

或者如果是可变长度范围:

Set ENumber = Range("F1:F" &amp; Range("F1").End(xlDown).Row)

【讨论】:

  • 感谢您的快速响应。我已经尝试了您的建议,仍然收到错误 13 类型不匹配。如果我使用 Set ENumber = Range("F1") 或 F 列中的任何其他单元格,它就可以工作。一旦我输入一个范围,就会出现类型不匹配错误。非常感谢您的帮助
【解决方案2】:

您不能将整个范围命名为一个字符串strDirectory。您一次只能从该范围中选择一个单元格。您只需将 3 行移入 For 循环即可。

试试这个:

Sub SearchName()
    Dim ENumber As Range
    Dim ECell As Range
    Dim I As Integer
    Dim rownumber As Integer
    Dim varDirectory As Variant
    Dim strDirectory As String

    Set ENumber = Range ("F:F")

'Move the next 3 lines into the loop and change `Enumber` to `Ecell`
    'rownumber = ENumber.Row
    'strdirectory = "C:\Users\Dunelle\Desktop\" & ENumber & "*"
    'varDirectory = Dir (strDirectory, vbDirectory)

    For Each ECell In ENumber.Cells
        strDirectory = "C:\Users\Dunelle\Desktop\" & ECell & "*"
        varDirectory = Dir(strDirectory, vbDirectory)
        rownumber = ECell.Row
        If ENumber <> "" Then
            Cells(rownumber, 1) = varDirectory
            Cells(rownumber, 2) = strDirectory + varDirectory
            Exit Function
        End If
    Next ECell
End Sub

旁注:For 循环中有 Exit Function。应该是Exit Sub

【讨论】:

  • 感谢您的回答。我在上面尝试了您建议的答案,仍然收到类型不匹配错误。
  • 我认为您建议的代码没有任何问题,我确信它会工作,直到错误消息再次出现。如果我不能让它工作,可能不得不设计一个解决方法。非常感谢
  • 我测试了它并且它工作。你在哪一行得到错误?
  • 对不起,我知道我不是很清楚。在移动的那 3 行上,将 Enumber 更改为 Ecell。我会更新我的答案。
  • Moshe W,非常感谢。完美的工作,你的天才!保重,看看你:)
猜你喜欢
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多