2017-05-15 14 views
2

Ich habe zwei Arbeitsmappen.Kopieren Sie jeden Wert in einer Zeile in eine andere Arbeitsmappe, in der ein Wert übereinstimmt?

Arbeitsmappe A

Supplier Name  Date 

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

Arbeitsmappe B

Supplier Name 
Supplier A 
Supplier B 

Ich versuche, alle Lieferanten Namen zu kopieren, in dem sie das Datum Jun-17 entsprechen. Jun-17 ist auf einem Blatt namens (Vermögenswerte) in Zelle B1 geschrieben.

Ich erhalte einen Fehler

Object doesn't support this property or method. 

Auf dieser Linie:

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

Mein Code:

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 

Bitte kann mir jemand zeigen, wo ich falsch gehe?

+0

Off-Topic Tipp: 'On Error Resume Next' kann das Debuggen zu einer unglaublich schwierigen Herausforderung machen. Dies geschieht, weil es Fehler von Ihnen verbirgt. Erwägen Sie, dies während des Tests zu kommentieren und Ihren Code nach Möglichkeit zu refactorieren, um Fehler zu fangen, nicht zu unterdrücken. –

Antwort

1

es so probieren ...

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

Die Laufzeitfehler kann mit den Vorschlägen bereits korrigiert werden (die ThisWorkbook.Worksheets(1) sollten die Eltern von Range("O" & j), nicht von Format zu identifizieren), aber das bedeutet nicht mein Code wird funktionieren. Als echtes Datum hat 17-Jun-2017 einen Rohwert von 42.903. Format(42903, "mmm") gibt "Jun" als Textzeichenfolge zurück. Der Text Juninicht gleich 42903.

Wenn beide Assets! B1 und die Daten in ‚Arbeitsmappe A‘ Spalte A sind wahre Termine, dann müssen Sie nur 'ihre Rohwerte vergleichen alle Lieferantennamen zu kopieren wo sie das Datum Jun-17 'übereinstimmen.

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

Darüber hinaus, Autofilter mit mit 17-Jun-2017 Termine alle Zeilen wählen wäre effizienter. Siehe Using cell values as a date range autofilter. Sogar die Verwendung eines INDEX/MATCH-Funktionspaars zur geschlossenen Arbeitsmappe ist möglicherweise vorzuziehen.

+0

Sind Sie sicher, dass es ThisWorkbook.Worksheets ("Assets") sein sollte? Öffnen Sie nicht eine Arbeitsmappe mit dem Namen PAI Monthly Audits.xlsx? – Jeeped

Verwandte Themen