Excel2007VBA查找函数。试图在两张工作表之间找到数据并将其放入第三张工作表中
全部, 我试图编写一个宏来搜索Sheet2中Sheet1第2列中的所有单元格,并将找到的行复制到Sheet2 到目前为止,我得到的是:Excel2007VBA查找函数。试图在两张工作表之间找到数据并将其放入第三张工作表中,vba,excel-2007,Vba,Excel 2007,全部, 我试图编写一个宏来搜索Sheet2中Sheet1第2列中的所有单元格,并将找到的行复制到Sheet2 到目前为止,我得到的是: Sub CopyUnique() Application.DisplayAlerts = False Set QA_14 = Sheets("QA 14Feb") Set Prod_14 = Sheets("Prod 14Feb") Set Prod_O14 = Sheets("Sheet1") Counter = 1 D
Sub CopyUnique()
Application.DisplayAlerts = False
Set QA_14 = Sheets("QA 14Feb")
Set Prod_14 = Sheets("Prod 14Feb")
Set Prod_O14 = Sheets("Sheet1")
Counter = 1
Dim Found As Range
Dim QARange As Range
For Row = 1 To Prod_14.UsedRange.Rows.Count
Set QARange = QA_14.Cells(2, 1)
Set Found = QARange.Find(What:=Prod_14.Cells(Row, 2).Text, After:=QA_14.Range("A1"), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Not Found Is Nothing Then
Prod_14.UsedRange.Range(Cells(Row, 1), Cells(Row, Prod_14.UsedRange.Columns.Count)).Copy Prod_O14.Range("A" & LTrim(Str(Counter)))
Counter = Counter + 1
End If
Next
End Sub
问题发生在具有查找功能的线路上。只是给出了一个类型不匹配错误。我尝试过将所有变量拆分成单独的行,但它们不是问题的一部分
有什么想法吗
谢谢我认为这个问题的根源在于xlText不是lookin的有效选项。我相信您需要xlvalue或xlFormulas 还有两件事要考虑。Sheet1不是一个好的变量名。每个工作表都有一个CodeName属性,该属性在工作表的选项卡名称更改时不会更改。默认情况下,这些代码名是Sheet1、Sheet2等。这可能不会导致问题,但最好避免 在“下一步”中,按Sheet1.UsedRange.Count递增行数,这是所用范围内单元格数的计数。你可能应该使用
For Row = 1 to Sheet1.UsedRange.Rows.Count
编辑
这是另一个程序,我认为它符合你的要求
Sub CopyUnique()
Dim shQa14 As Worksheet
Dim shProd14 As Worksheet
Dim shProdO14 As Worksheet
Dim rCell As Range
Dim rFound As Range
Set shQa14 = Sheets("QA 14Feb")
Set shProd14 = Sheets("Prod 14Feb")
Set shProdO14 = Sheets("Sheet1")
For Each rCell In Intersect(shProd14.UsedRange, shProd14.Columns(2)).Cells
If Not IsEmpty(rCell.Value) Then
Set rFound = shQa14.Cells.Find(rCell.Value, , xlValues, xlPart)
If Not rFound Is Nothing Then
Intersect(rFound.EntireRow, rFound.Parent.UsedRange).Copy _
shProdO14.Cells(shProdO14.Rows.Count, 1).End(xlUp).Offset(1, 0)
End If
End If
Next rCell
End Sub
我没有指定太多的Find参数,只指定我关心的参数。您使用的after参数无效。删除它,您将不再收到类型不匹配错误。第一个问题得到了回答,现在我们有了其他。。。我正在检查如何正确设置此值
我相信,如果你能更好地解释你想要实现的目标,我们就可以改进我们的帮助和建议
Rgds
编辑:
似乎After需要在被搜索的范围内(我相信这不是你想要的)
这段代码不会引起错误,尽管我相信它也不会做您想要的事情。如果你能给我们一个更好的例子,说明你需要什么,我们也许能进一步帮助你
提示#1:下次提交代码时,我会要求您在代码中包含所使用变量的声明(您使用的是Option Explicit,对吧?)。特别是在类型不匹配错误中,变量类型可能会导致问题
提示#2:我建议看一看匈牙利符号
Sub test()
Dim qa_14 As Worksheet
Dim prod_14 As Worksheet
Dim prod_o14 As Worksheet
Dim iCounter As Integer
Dim iRow As Integer
Dim rngAfter As Excel.Range
Dim rngWhat As Excel.Range
Dim Found As Range
Dim QARange As Range
Set qa_14 = Sheets("QA 14Feb")
Set prod_14 = Sheets("Prod 14Feb")
Set prod_o14 = Sheets("Sheet1")
iCounter = 1
For iRow = 1 To prod_14.UsedRange.Rows.Count
Set QARange = qa_14.Cells(2, 1)
Set rngAfter = QARange.Cells(1, 1)
Set Found = QARange.Find(What:=prod_14.Cells(iRow, 2).Text, After:=rngAfter, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Not Found Is Nothing Then
prod_14.UsedRange.Range(Cells(iRow, 1), Cells(iRow, prod_14.UsedRange.Columns.Count)).Copy prod_o14.Range("A" & LTrim(Str(iCounter)))
iCounter = iCounter + 1
End If
Next
End Sub
做了所有这些改变。没用。更新了原始问题中的代码。