11.6k Aufrufe
Gefragt in Tabellenkalkulation von florian1010 Mitglied (754 Punkte)
Hallo zusammen,

habe ein super funktionierendes Makro, dass mir Zeilen kopiert und in einer anderen Tabelle einfügt. Allerdings mit Formeln.

Kann mir jemand dieses Makro so umbauen, dass nur noch die Werte eingefügt werden?


If i = UBound(arr) Then
.Range(.Cells(2, arr(i)), .Cells(lngRow, arr(i))).SpecialCells(xlVisible).Copy Sheets("Lagerbewegungen").Cells(lngrow2, 13)
Else
.Range(.Cells(2, arr(i)), .Cells(lngRow, arr(i))).SpecialCells(xlVisible).Copy Sheets("Lagerbewegungen").Cells(lngrow2, i + 1)
End If

Danke.

Gruß
Florian

13 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Florian,

anstelle von direktem Kopieren kann man auch nur Inhalte einfügen - so nach diesem Prinzip (ungetestet):

If i = UBound(arr) Then
.Range(.Cells(2, arr(i)), .Cells(lngRow, arr(i))).SpecialCells(xlVisible).Copy
Sheets("Lagerbewegungen").Cells(lngrow2, 13).PasteSpecial Paste:=xlValues
Else
.Range(.Cells(2, arr(i)), .Cells(lngRow, arr(i))).SpecialCells(xlVisible).Copy
Sheets("Lagerbewegungen").Cells(lngrow2, i + 1).PasteSpecial Paste:=xlValues
End If


Bis später,
Karin
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo Karin,

danke schon mal für deine Antwort.

Da bringt mir Excel: Fehler beim Kompilieren: Erwartet: Anweiungsende

Gruß
Florian
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Florian,

kann ich nicht nachvollziehen, habe es egrad durch Kompilieren getestet.
Du hast auch jeweils 2 Code-Zeilen innerhalb von If und innerhalb von Else?

Bis später,
Karin
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo Katrin,

hier mal das ganze Makro.

Sub test()
Dim dteStart As Date, dteEnde As Date, i As Integer, j As Integer, arr, lngRow As Long, lngrow2 As Long
arr = Array(12, 4, 5, 7, 9, 15, 2)
Application.ScreenUpdating = False
With Sheets("Lagerbewegungen")
dteStart = .Cells(4, 3)
dteEnde = .Cells(4, 4)
End With
With Sheets("Übersicht")
.Columns("A:Q").AutoFilter Field:=12, Operator:=xlFilterValues, Criteria1:=">=" & CLng(dteStart), Criteria2:="<=" & CLng(dteEnde)
lngRow = .Cells(.Rows.Count, 12).End(xlUp).Row
lngrow2 = Sheets("Lagerbewegungen").Cells(Rows.Count, 1).End(xlUp).Row + 1
For i = LBound(arr) To UBound(arr)
If i = UBound(arr) Then
.Range(.Cells(2, arr(i)), .Cells(lngRow, arr(i))).SpecialCells(xlVisible).Copy Sheets("Lagerbewegungen").Cells(lngrow2, 13)
Else
.Range(.Cells(2, arr(i)), .Cells(lngRow, arr(i))).SpecialCells(xlVisible).Copy Sheets("Lagerbewegungen").Cells(lngrow2, i + 1)
End If
Next i

.Columns("A:Q").AutoFilter Field:=12
End With
With Sheets("Erledigt")
For j = 12 To 13
.Columns("A:Q").AutoFilter Field:=j, Operator:=xlFilterValues, Criteria1:=">=" & CLng(dteStart), Criteria2:="<=" & CLng(dteEnde)
lngRow = .Cells(.Rows.Count, j).End(xlUp).Row
If lngRow > 1 Then
lngrow2 = Sheets("Lagerbewegungen").Cells(Rows.Count, 1).End(xlUp).Row + 1
.Range(.Cells(2, j), .Cells(lngRow, j)).SpecialCells(xlVisible).Copy Sheets("Lagerbewegungen").Cells(lngrow2, (j - 12) * 6 + 1)
For i = LBound(arr) + 1 To UBound(arr)
If i = UBound(arr) Then
.Range(.Cells(2, arr(i)), .Cells(lngRow, arr(i))).SpecialCells(xlVisible).Copy Sheets("Lagerbewegungen").Cells(lngrow2, 13)
Else
.Range(.Cells(2, arr(i)), .Cells(lngRow, arr(i))).SpecialCells(xlVisible).Copy Sheets("Lagerbewegungen").Cells(lngrow2, (j - 12) * 6 + 1 + i)
End If
Next i
End If
.Columns("A:Q").AutoFilter Field:=j
Next j
End With
With Sheets("Lagerbewegungen")
lngRow = .Cells(.Rows.Count, 7).End(xlUp).Row
.Range(.Cells(7, 14), .Cells(lngRow, 14)).FormulaR1C1 = "=IF(RC[-13]="""",RC[-7],RC[-13])"
.Range(.Cells(7, 1), .Cells(lngRow, 14)).Sort _
Key1:=.Cells(7, 14), Order1:=xlAscending, DataOption1:=xlSortNormal, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
.Range(.Cells(7, 14), .Cells(lngRow, 14)).ClearContents
.Range(.Cells(6, 1), .Cells(lngRow, 13)).AutoFilter Field:=13, Operator:=xlFilterValues, Criteria1:="DMG"
End With
End Sub

Gruß
Florian
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Florian,

wenn ich deinen Code in den VBA-Editor kopiere, erhalte ich beim Kompilieren keine Fehlermeldung.

Bis später,
Karin
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo Karin,

wenn ich mein Makro mit .PasteSpecial Paste:=xlValues vervollständige, gibt es die Fehlermeldung.

Gruß
Florian
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Florian,

den Fehler gibt es NICHT, wenn du alles so beachtest wie ich das geschrieben habe. Du solltest die Beiträge schon richtig lesen.

Bis später,
Karin
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo Karin,

ich möchte dich nicht verägern, geschweige denn ärgern.

">www.file-upload.net/download-6633449/Syntaxfehler.xlsx.html
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Florian,

Karin schrieb:
Hi Florian,

kann ich nicht nachvollziehen, habe es egrad durch Kompilieren getestet.
Du hast auch jeweils 2 Code-Zeilen innerhalb von If und innerhalb von Else?


..der letzte Satz trift aber in Deinem Makro nicht zu, bei Dir ist es immer nur eine Zeile.

Leider kann man es nicht ändern, da Du nur ein Bild geschickt hast.



Gruß
Rainer
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo,

OKAY - Jetzt hab ichs verstanden. Stand mal wieder voll auf der Leitung. 2 Zeilen. Klar. War gestern nicht ganz auf 'm Dampfer.

Es funktioniert es.

Gruß
Florian
...