Excel VBA 类型不匹配错误
Posted
技术标签:
【中文标题】Excel VBA 类型不匹配错误【英文标题】:Excel VBA Type mismatch error 【发布时间】:2013-06-06 16:58:53 【问题描述】:不过,我正在尝试将一张工作表的一列的值与另一张工作表的另一列的值进行比较,同一个工作簿。它逐步遍历另一列中的每个单元格,如果单元格值(字符串)在 sheet2 中不存在,则将 sheet1 中的行复制到 sheet3。你可以把它想象成我在比较两个数组。我想看看 Array1 中是否有没有出现在 Array2 中的值,如果没有出现在 Array1 中,则将该值复制到 Array3 中。
我的主要问题是我在第 5 行遇到类型不匹配错误。这些值包含字符串。我是 Excel VBA 的新手,我正在努力学习它。任何帮助将不胜感激。
Sub search()
Dim count As Integer
count = 0
For Each i In Worksheets("Sheet1").Range("C2:C4503")
Set first_cell = Worksheets("Sheet1").Cells(i, 3) <-- Mismatch eror
For Each j In Worksheets("Sheet2").Range("X2:X4052")
Set second_cell = Worksheets("Sheet2").Cells(j, 24)
If second_cell = first_cell Then Exit For
Next j
count = count + 1
Set Worksheets("Sheet3").Cells(count, 1) = Worksheets("Sheet1").Cells(j, 1).Select
Next i
结束子
【问题讨论】:
如果您想要该值,请使用.Value
或.Value2
属性。 Cells()
返回一个范围。
值是否以任何方式排序,或者 sheet1 中的值可以在 sheet2 上的任何位置?
您以一种模棱两可的方式使用 i:首先,作为 For each i 中的范围项,然后作为 Cells(i, 3) 中的整数。
这些值没有排序。每个工作表都有一个包含值的列,我想看看 sheet1 中的值是否出现在 sheet2 上。该值只会出现在特定列中。
【参考方案1】:
Sub Search()
Dim rowNum As Long
Dim i As Range, f As Range
rowNum = 1
For Each i In Worksheets("Sheet1").Range("C2:C4503").Cells
If Len(i.Value) > 0 Then
'search for value on sheet2
Set f = Worksheets("Sheet2").Range("X2:X4052").Find( _
i.Value, , xlValues, xlWhole)
If f Is Nothing Then
'not found: copy row from sheet1>sheet3
i.EntireRow.Copy Worksheets("Sheet3").Cells(rowNum, 1)
rowNum = rowNum + 1
End If
End If
Next i
End Sub
【讨论】:
【参考方案2】:以下内容:
For Each i In Worksheets("Sheet1").Range("C2:C4503")
...
Next i
遍历指定范围内的单元格; i 是代表当前单元格的Range
对象。
您在以下行的整数索引中使用它:
Set first_cell = Worksheets("Sheet1").Cells(i, 3)
因此类型不匹配。
【讨论】:
所以我将所有 .Cells(...) 更改为 .Value(...) 并且我收到运行时错误“1004”。可能是什么原因造成的?以上是关于Excel VBA 类型不匹配错误的主要内容,如果未能解决你的问题,请参考以下文章