Ich versuche, die gesamte Spalte in Tabelle A in Tabelle B zu kopieren. Die Spalte A hat Werte, die mit Formeln gebildet wurden. Ich kopiere SheetA-Spaltenwerte nur mit xlPasteValues . Es ist jedoch nicht das Einfügen der Werte in ein anderes sheetB. Die Spalte in SheetB ist leer. Mein VBA-Code
Public Sub CopyrangeA()
Dim firstrowDB As Long, lastrow As Long
Dim arr1, arr2, i As Integer
firstrowDB = 1
arr1 = Array("BJ", "BK")
arr2 = Array("A", "B")
For i = LBound(arr1) To UBound(arr1)
With Sheets("SheetA")
lastrow = Application.Max(3, .Cells(.Rows.Count, arr1(i)).End(xlUp).Row)
.Range(.Cells(1, arr1(i)), .Cells(lastrow, arr1(i))).Copy
Sheets("SheetB").Range(arr2(i) & firstrowDB).PasteSpecial xlPasteValues
End With
Next
Application.CutCopyMode = False
End Sub
Wenn Sie nur die gesamte Spalte kopieren möchten, können Sie den Code stark vereinfachen.
Sub CopyCol()
Sheets("Sheet1").Columns(1).Copy
Sheets("Sheet2").Columns(2).PasteSpecial xlPasteValues
End Sub
Oder
Sub CopyCol()
Sheets("Sheet1").Columns("A").Copy
Sheets("Sheet2").Columns("B").PasteSpecial xlPasteValues
End Sub
Oder wenn Sie die Schleife beibehalten möchten
Public Sub CopyrangeA()
Dim firstrowDB As Long, lastrow As Long
Dim arr1, arr2, i As Integer
firstrowDB = 1
arr1 = Array("BJ", "BK")
arr2 = Array("A", "B")
For i = LBound(arr1) To UBound(arr1)
Sheets("Sheet1").Columns(arr1(i)).Copy
Sheets("Sheet2").Columns(arr2(i)).PasteSpecial xlPasteValues
Next
Application.CutCopyMode = False
End Sub
Ich würde ohne Kopieren/Einfügen gehen
Sheets("SheetB").Range(arr2(i) & firstrowDB).Resize(lastrow, 1).Value = .Range(.Cells(1, arr1(i)), .Cells(lastrow, arr1(i))).Value
Persönlich würde ich es auch etwas abkürzen, wenn Sie nur die Spalten brauchen:
For i = LBound(arr1) To UBound(arr1)
Sheets("SheetA").Columns(arr1(i)).Copy
Sheets("SheetB").Columns(arr2(i)).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Next
von diesem Code-Snippet aus hat lastrow
oder firstrowDB
nicht viel Bedeutung
Ich hatte dieses Problem auch schon einmal und ich glaube, ich habe die Antwort gefunden.
Wenn Sie eine Schaltfläche zum Ausführen des Makros verwenden, ist dies wahrscheinlich mit einem anderen Makro verknüpft, z. B. einer Version, in der Sie gerade arbeiten. Führen Sie das Makro direkt über VBA (F5) aus, anstatt es mit der Schaltfläche auszuführen. Meine Vermutung ist, dass das funktionieren wird. Sie müssen lediglich das Makro auf der Schaltfläche dem Makro zuweisen, das Sie tatsächlich ausführen möchten.
Sie können dies auch verwenden
Sub CopyPaste()
Sheet1.Range("A:A").Copy
Sheet2.Activate
col = 1
Do Until Sheet2.Cells(1, col) = ""
col = col + 1
Loop
Sheet2.Cells(1, col).PasteSpecial xlPasteValues
End Sub
sie können dies verwenden:
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False