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

时间:2017-05-15 11:06:50

标签: excel vba excel-vba

我有两本工作簿。

练习册A

Supplier Name        Date

Supplier A         Jun-17
Supplier B         Jun-17
Supplier C         May-17

练习册B

Supplier Name
Supplier A
Supplier B

我正在尝试复制与Jun-17日期相匹配的所有供应商名称。 Jun-17写在单元格B1中名为(assets)的工作表上。

我收到错误

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

请有人告诉我哪里出错了吗?

2 个答案:

答案 0 :(得分:1)

尝试这样......

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

答案 1 :(得分:0)

可以使用已经提出的建议更正运行时错误(ThisWorkbook.Worksheets(1)应该用于标识Range("O" & j)的父级,而不是Format的父级,但这并不意味着您的代码将工作。作为真实日期,17-Jun-2017的原始值为42,903。 Format(42903, "mmm")"Jun"作为文本字符串返回。文字 Jun 等于42903。

如果Assets!B1和'Workbook A'列O中的日期都是真实日期,那么您只需比较其原始值'以复制与Jun-17日期相匹配的所有供应商名称”。

If ThisWorkbook.Worksheets(1).Range("O" & j).Value2 = ThisWorkbook.Worksheets("assets").Range("b1").Value2 Then

除此之外,使用AutoFilter选择2017年6月17日的所有行将更有效。见Using cell values as a date range autofilter。即使对已关闭的工作簿使用INDEX / MATCH函数对也是可取的。