试图找到一个区域名称的名称 - 得到错误13类型不匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了试图找到一个区域名称的名称 - 得到错误13类型不匹配相关的知识,希望对你有一定的参考价值。

我相信这个问题是我有一个名为“AllNames”的范围内,因为当我走过我看到“基本名称”范围调用正确D1中的字符串值。这本来是简单的运动,但我完全被卡住关于如何解决此问题。当我使用监视窗口,我得到键入“对象/范围”两种,所以我不知道从哪里错配发生。

Sub FindName()

Dim AllNames As Range
Dim BaseName As Range

Set AllNames = Range("a1", "c6")
Set BaseName = Range("D1")

For Each BaseName In AllNames
    If StrComp(BaseName.Value, AllNames.Value, vbTextCompare) = 1 Then
        AllNames.Cells.Interior.ColorIndex = 3
    End If
Next BaseName

End Sub

最终的结果是,被称为基本名称的范围将具有其细胞背景改变时,它在AllNames的较大范围被发现。相反,我得到运行时错误13

答案

最简单的部分第一 - 不正确的代码导致你的错误:

   If StrComp(BaseName.Value, AllNames.Value, vbTextCompare) = 1 Then

在你的代码,BaseName现在是一个单细胞,但AllNames是值的数组,你想一个潜在的字符串和潜在的字符串数组之间做StrComp

现在的题外话提示:

  • 使用Option Explicit始终。
  • AllNames范围是不是你认为它(你的意思是.Range("A1:C6")?)
  • 你的循环摧毁你的早期分配到BaseName因为您使用BaseName通过循环迭代。
  • 你应该完全限定的范围内,以避免任何ActiveSheet问题。

修改后的代码:

Sub FindName()
Dim allNames As Range
Dim baseName As String ' Avoid referring to the Excel range to improve performance.
Dim cellIterator as Range

    With ThisWorkbook.Worksheets("Sheet1") ` amend as required
        Set AllNames = .Range("A1:C6")
        Set BaseName = .Range("D1").Value

        For Each cellIterator In AllNames
            If StrComp(BaseName, cellIterator.Value, vbTextCompare) = 1 Then
                cellIterator.Cells.Interior.ColorIndex = 3
            End If
        Next cellIterator 
    End With
End Sub

未经测试。

另一答案

此功能会发现,在A1到C6列出的名称(D1):

    Option Explicit

    Sub FindName()

        Dim AllNames As Range
        Dim BaseName As Range
        Dim rngItem As Range

        Set AllNames = Range("A1:C6")
        Set BaseName = Range("D1")

        For Each rngItem In AllNames
            'strComp returns -1, 0, and 1.
            '-1 if string1 is less than string2
            '0 if they are equal
            ' 1 if string1 is greater than string2
            If StrComp(rngItem.Value, BaseName.Value, vbTextCompare) = 0 Then
                rngItem.Interior.ColorIndex = 3
            End If
        Next

        Set AllNames = Nothing
        Set BaseName = Nothing
        Set rngItem = Nothing

    End Sub
另一答案
Sub ColourDuplicateName()

Dim baseName As Range

With ThisWorkbook.Worksheets("sheet1")
Set baseName = Range("b1")

For I = 1 To 7
    If StrComp(baseName.Value, Cells(I, 1).Value, vbTextCompare) = 1 Then
    Cells(I, 1).Interior.ColorIndex = 3
    End If
Next I

End With
End Sub

以上是关于试图找到一个区域名称的名称 - 得到错误13类型不匹配的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA 2016 - 试图找到复选框的名称,无法获取值属性错误

查找文件夹/子文件夹名称时 MS Access VBA 运行时错误“13”类型不匹配

C# 未能找到类型或命名空间名称“Form1”(是不是缺少 using 指令或程序集引用?)

Joomla - 500 未找到视图 [名称、类型、前缀]

找不到类型或命名空间名称“readFullyStream”

错误 1 未能找到类型或命名空间名称“Form1”(是不是缺少 using 指令或程序集引用?)