Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA nur Werte in zweites Tabellenblatt übertragen
#1
Hallo im Forum,

habe eine Beispieltabelle beigefügt mit einem VBA Code, den ich nicht zum Laufen bekomme. Habe schon stundenlang überall versucht Lösungen zu finden. - Klappt einfach nicht.
Es sollen einfach nur Werte aus der Tabelle1 (ohne Formeln) ab einer bestimmten Stelle in die Tabelle2 übertragen werden. Dort soll die Formatierung nicht verändert werden.
Genaueres ist in der Beispieltabelle beschrieben. - Vielleicht habt Ihr ja eine gute Idee dazu. Der Code soll möglichst schlank sein und wenig Speicher benötigen, da es um die 600 Zeilen sind, die in der Originaltabelle zu durchsuchen sind.

Danke Euch schon einmal im Voraus

Grüße
NobX


Angehängte Dateien
.xlsm   Testmappe6.xlsm (Größe: 25,82 KB / Downloads: 8)
Antworten Top
#2
Hallo,
Sub aaa()
Dim i As Long, j As Long, k As Long
Dim varQ As Variant, varZ As Variant
varQ = Tabelle1.Range("A1").CurrentRegion.Value
ReDim varZ(1 To UBound(varQ, 1), 1 To UBound(varQ, 2))
For i = 1 To UBound(varQ)
If varQ(i, 8) <> 0 Then
k = k + 1
For j = 1 To UBound(varQ, 2)
varZ(k, j) = varQ(i, j)
Next j
End If
Next i
Tabelle2.Range("B6").Resize(UBound(varZ, 1), UBound(varZ, 2)).Value = varZ
End Sub
Gruß Uwe
Antworten Top
#3
Hallo NobX,

da geht bei Dir einiges durcheinander...

Anbei der korrigierte Code:
Code:
Sub TestKopierenEinfügen()
    Dim wks1 As Worksheet, wks2 As Worksheet, Zeile As Integer, j As Long
   
    Set wks1 = Sheets("Tabelle1")
    Set wks2 = Sheets("Tabelle2")
 
    Application.ScreenUpdating = False
     
    With wks1
           j = 6
           For Zeile = 1 To .UsedRange.SpecialCells(xlCellTypeLastCell).Row

            If .Cells(Zeile, 8) <> 0 Then
                .Rows(Zeile).Copy
                wks2.Cells(j, "A").PasteSpecial Paste:=xlPasteValues
                j = j + 1
            End If
        Next Zeile
        End With
        Application.CutCopyMode = False
    Application.ScreenUpdating = True
  End Sub

Gruß,
Lutz
Antworten Top
#4
Hallo Lutz,

und sonst ist soweit alles OK bei Dir? Blush

Gruß Uwe
Antworten Top
#5
Warum?
Antworten Top
#6
Hallo Uwe, hallo Lutz,

vielen Dank für Eure Arbeit.
Der Code von Uwe funktioniert genau so, wie ich es wollte, beim Code von Lutz funktioniert es auch besser als bei mir zuvor. Ich bekomme jedoch die Werte in Tabelle 2 nicht ab "B6" eingefügt, sondern beginnend ab "A6". Wenn ich jedoch das "A" im Code auf "B" verändere, kommt wieder ein Fehler. Warum ist das so?

Grüße und nochmals herzlichen Dank.

NobX
Antworten Top
#7
Hallo NobX,

weil die ganze Zeile kopiert wird und dann auch wieder in eine ganze Zeile eingefügt werden muss (sonst würde ja am Ende ne Zelle rausfallen).
Bei Bedarf könnte man natürlich den Bereich auf eine Anzahl an Spalten eingrenzen.

Wenn dir Uwe's Version taugt, nimmst Du einfach die.
Ist auch die schnellere von beiden  Blush.

Gruß,
Lutz
Antworten Top
#8
Hallo Lutz,

(08.12.2020, 10:28)Lutz Fricke schrieb: Warum?

alles gut. :100:
Ich hatte das vorhandene Makro in der Tabelle1 gar nicht wahrgenommen. Blush

Gruß Uwe
Antworten Top
#9
Hallo Lutz, hallo Uwe,

vielen Dank noch einmal. Passt so.

Grüße

NobX
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste