Ich habe eine Arbeitsmappe, in der wir unsere Angebotskosten berechnen. Es gibt ein Hauptblatt mit dem Namen "Kostenblatt" und einzelne Blätter, die unterschiedliche Namen haben können. Alle Blätter haben dasselbe Format wie Erste Zeile als Kopfzeile. Ich möchte nur ein Makro, das nach Werten in Spalte A in "Costing Sheet" sucht und mit den Werten in Spalte A anderer Blätter vergleicht. Wenn gefunden, kopieren Sie dann ganze Zeile A: W von einzelnen Blättern mit Formeln und formatieren nach "Costing Blatt "gegen den übereinstimmenden Wert. Ich habe ein Makro erstellt, das alle Daten kopiert und ein neues Blatt erstellt. aber das gibt mir nicht die gewünschte Ausgabe. Ich habe mehrere Foren durchsucht, konnte aber nicht dasselbe finden. Es wäre eine große Hilfe sein, wenn Sie helfen könnten METHIS der Code ich für die Schaffung eines neuen BlattZeile mit Formel in Hauptblatt kopieren
erscheintSub CopyFromWorksheets()
Dim wrk As Workbook
Dim sht As Worksheet
Dim trg As Worksheet
Dim rng As Range
Dim colCount As Integer
Set wrk = ActiveWorkbook
For Each sht In wrk.Worksheets
If sht.Name = "Master" Then
MsgBox "There is a worksheet called as 'Master'." & vbCrLf & _
"Please remove or rename this worksheet since 'Master' would be" & _
"the name of the result worksheet of this process.", vbOKOnly + vbExclamation, "Error"
Exit Sub
End If
Next sht
Application.ScreenUpdating = False
Set trg = wrk.Worksheets.Add(After:=wrk.Worksheets(wrk.Worksheets.Count))
'Rename the new worksheet
trg.Name = "Master"
'Get column headers from the first worksheet
'Column count first
Set sht = wrk.Worksheets(1)
colCount = sht.Cells(1, 255).End(xlToLeft).Column
'Now retrieve headers, no copy&paste needed
With trg.Cells(1, 1).Resize(1, colCount)
.Value = sht.Cells(1, 1).Resize(1, colCount).Value
'Set font as bold
.Font.Bold = True
End With
'We can start loop
For Each sht In wrk.Worksheets
'If worksheet in loop is the last one, stop execution (it is Master worksheet)
If sht.Index = wrk.Worksheets.Count Then
Exit For
End If
'Data range in worksheet - starts from second row as first rows are the header rows in all worksheets
Set rng = sht.Range(sht.Cells(2, 1), sht.Cells(65536, 1).End(xlUp).Resize(, colCount))
'Put data into the Master worksheet
trg.Cells(65536, 1).End(xlUp).Offset(1).Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Formula
Next sht
'Fit the columns in Master worksheet
trg.Columns.AutoFit
Sheets("Master").Select
colCount = Range("A" & Rows.Count).End(xlUp).Row
Range("L2:L" & colCount).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'Screen updating should be activated
Application.ScreenUpdating = True
Sheets("Costing Sheet").Select
End Sub
Hallo Mr.Tony Dallimore Danke für Ihre Antwort. Jedes einzelne Blatt hat eine Gesamtberechnung für dieses Blatt am unteren Rand. Wenn ich dieses Makro ausführe, würden alle Daten zum Hauptblatt übertragen. Aber ich brauche diese einzelnen Blätter nicht in der Gesamtübersicht. Also wollte ich nur die einzelnen Blatt-Summen vermeiden, die nach den Kriterien der leeren L-Spalten auf das Master Sheet kopiert wurden. Aber es gibt praktische Probleme. ** Ich würde nur ein Makro benötigen, das ganze Zeile von einzelnen Blättern in das Hauptblatt kopiert, basierend auf den Werten in Spalte A des Hauptblattes ** –
Für meine Antwort habe ich versucht, Ihren Code zu verbessern, aber ich habe nichts hinzugefügt. Es gibt nichts in Ihrem ursprünglichen Code, der Werte gegen das Arbeitsblatt "Costing Sheet" prüft, so dass es nicht in meiner Version ist. Ich habe Ihre Frage genauer gelesen und der Code, den Sie suchen, ist mehr als eine korrigierte Version. Nach welchen Werten suchen Sie in "Costing Sheet"? Mit welchen Werten vergleichen Sie sie in anderen Blättern? Welche Zeilen kopieren Sie nach "Master"? –
Ich werde auf die Grundlagen hinweisen, die leichter zu verstehen sind. –