Dies ist mein allererstes VBA-Programm und post hier so nimm es einfach: D. Ich bin ein Sommer Praktikant in der AeroSpace Abteilung arbeiten, unser Projekt ist derzeit beteiligt heavvy Satellitenproduktion und ich bin verantwortlich für die Lieferung der Enddaten Datenpaket an unseren Kunden. Eines dieser Ergebnisse enthält ein so genanntes As Design As Build. Im Wesentlichen habe ich ein Makro, das P/N in einem Blatt zu einem anderen Blatt sucht. Beide sind Controller durch einen Zähler, x ist der Zähler für das Bom-Blatt und y ist der Zähler für das Master-Blatt. Wenn die P/N gleich sind, kopiert es einige Zellen von der Stückliste auf das Masterblatt. Hier ist die Stückliste das ständig wechselnde Blatt und der Master ist das, was jedes Fahrzeug haben soll. Fehlende Gegenstände sind mein Problem hier. Ich habe es so codiert, dass fehlende Elemente in der Stückliste einfach übersprungen werden und eine Leerstelle hinterlassen wird. Wenn sich jedoch ein Element in der Stückliste befindet, das sich nicht auf dem Master befindet, durchsucht es alle Zeilen, trifft das Ende und bricht dann ab. Ich habe das Hinzufügen dieser versucht, es zu begegnen, aber es scheint nicht zu funktionieren:VBA Suchen nach P/N in zwei Blättern und Kopieren von Daten
Else
y = y + 1
If (y = FinalRow) Then
x = x + 1
Ich bin ziemlich viel versucht, den x-Wert zu stoßen oder eine Zeile auf dem Bom Blatt nach unten zu bewegen, wenn der y-Wert hat erreichte das Ende des Masterblatts, um die Schleife fortzusetzen. Jede Hilfe/Kritik wäre großartig! Sub ADAB() ‚Need Meister und Bom Arbeitsblatt
Dim dataFile As String
Dim WB As Workbook
Dim x As Integer
Dim y As Integer
Dim iFound As Integer
Dim BomValue As String
Dim MasterValue As String
'Set variables
Workbooks("ADAB Tool.xlsm").Activate
dataFile = Cells(1, 1).Value
Set WB = Workbooks.Open(Filename:=dataFile, ReadOnly:=False)
'Open workbook from path
Worksheets("Master").Activate
FinalRow = Cells(Rows.Count, 1).End(xlUp).Row
y = 2
x = 2
Do While (y <= FinalRow)
Workbooks("ADAB1.xlsx").Activate
Worksheets("Bom").Activate
BomValue = Worksheets("Bom").Cells((x), 1).Value
MasterValue = Worksheets("Master").Cells((y), 1).Value
iFound = 0
If (BomValue = MasterValue) Then
Worksheets("Master").Activate
Worksheets("Bom").Activate
Dim Range As Range
Set Range = Worksheets("Bom").Range(Cells(x, 1), Cells(x, 4))
Worksheets("Master").Activate
Worksheets("Master").Range(Cells(y, 3), Cells(y, 6)) = Range.Value
iFound = 1
x = x + 1
y = y + 1
Else
y = y + 1
If (y = FinalRow) Then
x = x + 1
End If
End If
Loop
End Sub
Wenn es bricht, wirft es einen Fehler? Um nur darauf hinzuweisen, müssen Sie das Arbeitsblatt vor 'Cells()' einfügen, genau wie Sie es mit 'Range()' gemacht haben, sonst können Sie unerwartete Ergebnisse erhalten. – BruceWayne
Es gibt keinen Fehler, aber der gesamte Such-/Kopiervorgang wird gestoppt. Ich werde die Arbeitsblätter vor den Zellen hinzufügen. –