it-swarm.com.de

Nur Werte für Excel-VBA-Copy-Einfügen

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
26
sam

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
36
OSUZorba

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
8
robotik

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

2
bmgh1985

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.

1
Blake Turner

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
1
nishit dey

sie können dies verwenden:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
0
akallali