Vba 将行中的每个值复制到另一个值匹配的工作簿?

Vba 将行中的每个值复制到另一个值匹配的工作簿?,vba,excel,Vba,Excel,我有两本作业本 工作手册A Supplier Name Date Supplier A Jun-17 Supplier B Jun-17 Supplier C May-17 工作手册B Supplier Name Supplier A Supplier B 我正在尝试复制所有供应商名称,这些名称与6月17日的日期相匹配。 6月17日写在B1单元中名为(资产)的表格上 我犯了一个错误 Object doesn't support

我有两本作业本

工作手册A

Supplier Name        Date

Supplier A         Jun-17
Supplier B         Jun-17
Supplier C         May-17
工作手册B

Supplier Name
Supplier A
Supplier B
我正在尝试复制所有供应商名称,这些名称与6月17日的日期相匹配。 6月17日写在B1单元中名为(资产)的表格上

我犯了一个错误

Object doesn't support this property or method.
在这一行:

If ThisWorkbook.Worksheets(1).Format(Range("O" & j).Value, "mmm") = ThisWorkbook.Worksheets("assets").Range("b1").Value Then
我的代码:

Sub Monthly()


On Error Resume Next

UserForm1.Show
If Format(Range("O211").Value, "mmm") = Worksheets("assets").Range("b1").Value Then
MsgBox "Yes"
End If

Dim WB As Workbook
On Error Resume Next
Set WB = Workbooks("PAI Monthly Audits.xlsx")
On Error GoTo 0
If WB Is Nothing Then
    Set WB = Workbooks.Open("G:\QUALITY ASSURANCE\03_AUDITS\PAI\templates\PAI Monthly Audits.xlsx", UpdateLinks:=False)
End If



With ThisWorkbook.ActiveSheet
    LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
    j = 6

    For i = 2 To LastRow


        If ThisWorkbook.Worksheets(1).Format(Range("O" & j).Value, "mmm") = ThisWorkbook.Worksheets("assets").Range("b1").Value Then
                .Range("B" & i).Value = ThisWorkbook.Worksheets(1).Range("B" & j).Value
                j = j + 1
            End If
    Next i
End With



End Sub
有人能告诉我哪里出了问题吗?

像这样试试

If Format(ThisWorkbook.Worksheets(1).Range("O" & j).Value, "mmm") = ThisWorkbook.Worksheets("assets").Range("b1").Value Then

运行时错误可以使用已经提出的建议进行更正(工作表(1)应用于标识
范围(“O”&j)
,而不是
格式的
的父项),但这并不意味着您的代码可以工作。作为真实日期,
2017年6月17日
的原始值为42903<代码>格式(42903,“mmm”)
以文本字符串的形式返回
“Jun”
。文本Jun不等于42903

如果两者都是资产!B1和“工作簿A”第O列中的日期为真实日期,那么您只需比较它们的原始值即可“复制所有供应商名称,使其与6月17日的日期相匹配”


除此之外,使用AutoFilter选择2017年6月17日日期的所有行将更有效。看见甚至对已关闭的工作簿使用索引/匹配函数对也可能更可取。

非主题提示:
出错时继续下一步
可能会使调试变得异常困难。这是因为它对您隐藏了错误。考虑在测试过程中对此进行注释,如果可能的话,重构代码以捕获,而不是抑制错误。您确定应该是<代码>此工作簿吗?工作表(“资产”)< /代码>?您没有打开名为PAI Monthly Audits.xlsx的工作簿吗?
If ThisWorkbook.Worksheets(1).Range("O" & j).Value2 = ThisWorkbook.Worksheets("assets").Range("b1").Value2 Then