Sub Export_Kommission_Module()
'
' Export des Arbeitsblattinhalts in neue Arbeitsmappe
Dim objOLE As Object
Sheets("Kommission_Module").Copy
With ActiveSheet
.Unprotect
.Range("A19:G" & .Cells(Rows.Count, "A").End(xlUp).Row).Value = _
.Range("A19:G" & .Cells(Rows.Count, "A").End(xlUp).Row).Value
For Each obj In .DrawingObjects
Select Case obj.Name
Case "Picture 1", "Picture 3"
Case Else
obj.Delete
End Select
Next
End With
Application.Goto Reference:="R1C1"
End Sub
Sub Export_Kommission_Paletten()
'
' Export des Arbeitsblattinhalts in neue Arbeitsmappe
Dim objOLE As Object
Sheets("Kommission_Paletten").Copy
With ActiveSheet
.Unprotect
.Range("A19:G" & .Cells(Rows.Count, "A").End(xlUp).Row).Value = _
.Range("A19:G" & .Cells(Rows.Count, "A").End(xlUp).Row).Value
For Each obj In .DrawingObjects
Select Case obj.Name
Case "Picture 1", "Picture 3"
Case Else
obj.Delete
End Select
Next
End With
Application.Goto Reference:="R1C1"
End Sub
Gruß Jürgen
AW: Die Selects und Selection sind überflüssig!
Bibo
Hallo Jürgen,
hallo Daniel,
vielen Dank für Eure Unterstützung.
Die Codes von Dir lieber Jürgen funktionieren super, genau wie erhofft.
Könnt Ihr mir bei meinem anderen Problem auch helfen?
"in der mit Hilfe aus dem Forum erstellten, beigefügten Arbeitsmappe werden im Arbeitsblatt " _
Kommission_Paletten" mit den Funktionen SVerweis und Index die abhängigen Daten zum Bereich G13:G13 aus dem Arbeitsblatt "Bestand" in den Bereich A19:G246 übernommen.
Über den CommandButton "Daten der aktuellen Flashliste in Bestandsübersicht übernehmen" und das _
Makro Sub Lieferschein_Paletten() in Diese Arbeitsmappe des VBA-Editors werden die Werte aus "Kommission_Paletten" B9:B12 für übereinstimmende Seriennummern in die Spalten K:N des Arbeitsblatts "Bestand" übernommen.
Das klappt für das Arbeitsblatt ""Kommission_Module" auch völlig problemlos, bei der Datenü _
bernahme aus dem Arbeitsblatt "Kommission_Paletten" in das Arbeitsblatt "Bestand" erfolgt jedoch immer ein Eintrag in der Zeile 80 (Bereich gelb markiert), dessen Zustandekommen ich mir nicht erklären kann, sogar dann, wenn der von B13:G13 abhängige Bereich A19:G246 keine Werte enthält, da B13:G13 selbst leer ist.
Als generelle Ursache der Datenübernahme scheiden "leere" Vergleichswerte in den Spalten mit _
den Seriennummern wohl aus, da dann ja auch alle anderen leeren Zellen in der ausgeblendeten Spalte A des Arbeitsblattes "Bestand" zu einer Datenübernahme führen müssten.
Liegt der Fehler am Makro und was müsste daran geändert werden?"
Im Moment sehe ich als einzige, aber eigentlich unbefriedigende Möglichkeit, da sie die Ursache nicht behebt, den Code so zu ergänzen, dass er die übernommenen Eintragungen in K80:N80 des Arbeitsblatts "Bestand" einfach wieder löscht. Oder ich formatiere den Bereich mit Schriftfarbe weiß?
Was meint Ihr, könnt Ihr mir nochmals helfen?
Gruß
Bibo
AW: Die Selects und Selection sind überflüssig!
Bibo
Habe vergessen, die Frage als noch offen zu markieren.
Gruß
Bibo
Kleine Ursache, große Wirkung!
Backowe
Hi Bibo,
ich habe im Makro die Spalte A mit den Wenn-Formeln, auf die Spalte E geändert, da beide Spalten identisch sind, damit war das Problem gelöst!
VBA-Code: | Option Explicit
'überträgt die Zellinhalte des Tabellenblatts Kommission_Module
'der Spalte 2 Zeilen 9 bis 12 in Abhängigkeit zur entsprechenden
'Seriennummer in Spalte A in die Spalten 11 bis 14 des Tabellenblatts Bestand
Sub Lieferschein_Module()
Dim Quelle As Worksheet, Ziel As Worksheet
Dim lngBestZ1 As Long, lngKommZ1 As Long, i As Long, füllzeile As Variant
Set Quelle = ThisWorkbook.Worksheets("Kommission_Module")
Set Ziel = ThisWorkbook.Worksheets("Bestand")
lngBestZ1 = 2 'Beginnzeile
lngKommZ1 = 19 'Beginnzeile
With Ziel
For i = lngKommZ1 To Quelle.Cells(Quelle.Rows.Count, 1).End(xlUp).Row
füllzeile = Application.Match(Quelle.Cells(i, 1).Value, _
.Range(.Cells(lngBestZ1, "E"), .Cells(.Rows.Count, "E").End(xlUp)), 0) '<--- Von Spalte A auf Spalte E geändert!
If IsNumeric(füllzeile) Then
.Cells(füllzeile + 1, 11) = Quelle.Cells(9, 2)
.Cells(füllzeile + 1, 12) = Quelle.Cells(10, 2)
.Cells(füllzeile + 1, 13) = Quelle.Cells(11, 2)
.Cells(füllzeile + 1, 14) = Quelle.Cells(12, 2)
End If
Next
End With
End Sub
'überträgt die Zellinhalte des Tabellenblatts Kommission_Paletten
'der Spalte 2 Zeilen 9 bis 12 in Abhängigkeit zur entsprechenden
'Seriennummer in Spalte A in die Spalten 11 bis 14 des Tabellenblatts Bestand
Sub Lieferschein_Paletten()
Dim Quelle As Worksheet, Ziel As Worksheet
Dim lngBestZ1 As Long, lngKommZ1 As Long, i As Long, füllzeile As Variant
Set Quelle = ThisWorkbook.Worksheets("Kommission_Paletten")
Set Ziel = ThisWorkbook.Worksheets("Bestand")
lngBestZ1 = 2 'Beginnzeile
lngKommZ1 = 19 'Beginnzeile
With Ziel
For i = lngKommZ1 To Quelle.Cells(Quelle.Rows.Count, 1).End(xlUp).Row
füllzeile = Application.Match(Quelle.Cells(i, 1).Value, _
.Range(.Cells(lngBestZ1, "E"), .Cells(.Rows.Count, "E").End(xlUp)), 0) '<--- Von Spalte A auf Spalte E geändert!
If IsNumeric(füllzeile) Then
.Cells(füllzeile + 1, 11) = Quelle.Cells(9, 2)
.Cells(füllzeile + 1, 12) = Quelle.Cells(10, 2)
.Cells(füllzeile + 1, 13) = Quelle.Cells(11, 2)
.Cells(füllzeile + 1, 14) = Quelle.Cells(12, 2)
End If
Next
End With
End Sub
Gruß Jürgen
Kleine Ursache, große Wirkung! - Woran liegt es?
Bibo
Hallo Jürgen,
vielen Dank, dass Du Dich der Angelegenheit nochmals angenommen hast.
Deine Lösung beseitigt den Fehler bei der Datenübertragung, allein ich verstehe nicht weshalb!
Die identischen Werte der Spalte E in Spalte A stehen dort, damit die SVerweise in den Arbeitsblättern "Kommission_Module" und "Kommission_Paletten" auf die Werte im Tabellenblatt "Bestand" funktionieren.
Logischerweise enthalten die Zellen in Spalte A keine Werte, die in Spalte E leer sind, so z.B. in den Zeilen 40 und 41, 80 und 81, 120 und 121 usw. Warum erfolgt aber lediglich in Zeile 80 der entsprechende (nicht erwünschte) Eintrag in den Zellen K80:N80? Welche Erklärung gibt es denn hierfür?
Ich hatte mir bis zu Deinem Lösungsvorschlag damit beholfen, im Makro die Einträge im Bereich K80:N80 wieder zu löschen.
Gruß
Bibo
Dann etwas genauer!
Backowe
Hi Bibo,
die Match-Funktion reagiert auch auf Zellen mit Formeln, die leer sind. In Deinem Beispiel steht in Zelle A40:A41 keine Wenn-Formel, also wird der "entartete Datensatz" in A80 geschrieben. Löschst Du die Wenn-Formel in A80:A81 steht Dein Datensatz in A121 usw. Es muß einfach nur die Abfrage geändert werden, dann paßt es wieder.
VBA-Code: | 'überträgt die Zellinhalte des Tabellenblatts Kommission_Paletten
'der Spalte 2 Zeilen 9 bis 12 in Abhängigkeit zur entsprechenden
'Seriennummer in Spalte A in die Spalten 11 bis 14 des Tabellenblatts Bestand
Sub Lieferschein_Paletten()
Dim Quelle As Worksheet, Ziel As Worksheet
Dim lngBestZ1 As Long, lngKommZ1 As Long, i As Long, Füllzeile As Variant
Set Quelle = ThisWorkbook.Worksheets("Kommission_Paletten")
Set Ziel = ThisWorkbook.Worksheets("Bestand")
lngBestZ1 = 2 'Beginnzeile
lngKommZ1 = 19 'Beginnzeile
With Ziel
For i = lngKommZ1 To Quelle.Cells(Quelle.Rows.Count, 1).End(xlUp).Row
Füllzeile = Application.Match(Quelle.Cells(i, 1).Value, _
.Range(.Cells(lngBestZ1, 1), .Cells(.Rows.Count, 1).End(xlUp)), 0)
If .Cells(Füllzeile + 1, 1) <> "" Then
.Cells(Füllzeile + 1, 11) = Quelle.Cells(9, 2)
.Cells(Füllzeile + 1, 12) = Quelle.Cells(10, 2)
.Cells(Füllzeile + 1, 13) = Quelle.Cells(11, 2)
.Cells(Füllzeile + 1, 14) = Quelle.Cells(12, 2)
.Cells(Füllzeile + 1, 15) = Füllzeile
End If
Next
End With
End Sub
AW: Dann etwas genauer!
Bibo
Hallo Jürgen,
vielen Dank für Deine freundliche Aufklärung. So war mir zum einen die von Dir beschriebene Eigenschaft der Match-Funktion nicht bekannt und andererseits war ich mir dessen nicht bewusst, dass die Zellen A40 und A41 ohne Formeln sind. Jetzt kapier ich auch die Folge und konnte sie über try and error auch nachvollziehen.
Gruß
Bibo
|
|
|