试图找到一个区域名称的名称 - 得到错误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”类型不匹配