2017-12-05 15 views
0

Ich bin ziemlich neu in diesem Zeug, das Schreiben von Makros in Excel. Ich muss ein Makro ändern, wo Inhalt von 1 Blatt zu einem anderen kopiert wird, aber hier werden nur Werte kopiert, während ich auch Zellformatierung kopieren möchte. Ich habe in mehreren Foren gesucht und versucht, ihre Formate zu kopieren, aber immer noch kein Glück. Vielleicht verpasse ich etwas in meinem Code.Kopieren von Werten und Format in VBA-Makro Excel

strActiveSheet - Blatt aus dem Inhalt

res kopiert wird - Blatt, auf dem Inhalt

With Sheets(strActiveSheet) 
    .Select 
    .Range(.Cells(DataStartRow - 1, 1), .Cells(DataStartRow - 1, 4)).Select 
    Selection.Copy 
    End With 

'Paste 
Sheets(res).Select 
Cells(9, 1).Select 
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

Dieser Code kopiert den Wert gerade eingefügt wird. Ich habe versucht, den folgenden Code zu verwenden, aber ohne Erfolg:

Sheets(res).Select 
    Cells(9, 1).Select 
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
    .PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

Wenn ich den folgenden Code verwenden, wird dies nur die Formatierung kopieren, sondern die Werte weglassen:

Sheets(res).Select 
     Cells(9, 1).Select 
     Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

sein Darf ich glaube, ich Ich schreibe PasteSpecial Code nicht im richtigen Format.

Kann mir bitte jemand helfen, das richtige Format zum Kopieren und Einfügen von Werten sowie Zellenformat von einem Blatt in ein anderes in VBA zu bekommen?

Darren - Ich habe meinen Code bearbeitet und verwendet, wie Sie in Ihrer Antwort angegeben haben:

Dim wrkSht As Worksheet 
Set wrkSht = ThisWorkbook.Worksheets("Sheet1") 

Dim resSheet As Worksheet 
Set resSheet = ThisWorkbook.Worksheets("Demo") 

With wrkSht 
    .Range(.Cells(DataStartRow - 1, 1), .Cells(DataStartRow - 1, 4)).Copy 
End With 

With resSheet 
    .Cells(9, 1).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
    .Cells(9, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
End With 

Aber noch ist es zu geben Nummer als Format auf meine Zellen anstelle der benutzerdefinierten eine, die Zelle zugeordnet ist, in Tabelle1.

Können Sie mir bitte helfen, wenn ich etwas in diesem Code verpasse?

+0

Sie müssen auf meine Antwort antworten oder meinen Benutzernamen mit @ davor schreiben - sonst erhalte ich keine Benachrichtigung über ein Update. Versuchen Sie, 'xlValues' in' xlPasteValuesAndNumberFormats' in PasteSpecial zu ändern. –

+0

Funktionierte noch nicht mit xlPasteValuesAndNumberFormats – user2091061

+0

Ich habe gerade Ihren Code getestet - ich musste "DataStartRow" einen Wert von 2 geben, so dass es aus Zeile 1 kopieren würde. Es kopiert die Formatierung von "Burt:" #, ## 0.00; [Rot] - #, ## 0.00' ohne Probleme. Welches Zahlenformat verwenden Sie und für welche Werte verwenden Sie es? Sind die Zahlen als Text formatiert? –

Antwort

0

Wenn Sie alles kopieren möchten, können Sie mit demselben Befehl kopieren und in das Ziel einfügen.

Sub Test() 

    Dim DataStartRow As Long 
    DataStartRow = 2 

    Dim wrkSht As Worksheet 
    Set wrkSht = ThisWorkbook.Worksheets("Sheet1") 

    Dim res As Worksheet 
    Set res = ThisWorkbook.Worksheets("Sheet2") 

    With wrkSht 
     .Range(.Cells(DataStartRow - 1, 1), .Cells(DataStartRow - 1, 4)).Copy Destination:=res.Cells(9, 1) 
    End With 

' Copy user selection 
' Selection.Copy Destination:=res.Cells(9, 1) 

' Paste to user selection 
' With wrkSht 
'  .Range(.Cells(DataStartRow - 1, 1), .Cells(DataStartRow - 1, 4)).Copy Destination:=Selection 
' End With 

End Sub 

Wenn Sie nur die Werte und Zelle wollen Formatierung dann können Sie zwei Paste Befehle zur Verfügung:

Sub Test() 

    Dim DataStartRow As Long 
    DataStartRow = 2 

    Dim wrkSht As Worksheet 
    Set wrkSht = ThisWorkbook.Worksheets("Sheet1") 

    Dim res As Worksheet 
    Set res = ThisWorkbook.Worksheets("Sheet2") 

    With wrkSht 
     .Range(.Cells(DataStartRow - 1, 1), .Cells(DataStartRow - 1, 4)).Copy 
    End With 

    With res 
     .Cells(9, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats 
     .Cells(9, 1).PasteSpecial Paste:=xlPasteFormats 
    End With 

' Copy user selection 
' Selection.Copy 

' Paste to user selection 
' With Selection 
'  .PasteSpecial Paste:=xlPasteValuesAndNumberFormats 
'  .PasteSpecial Paste:=xlPasteFormats 
' End With 

End Sub 

Anmerkung: Ich habe keine Zellen in dem Code ausgewählt. Sie müssen nur auf sie verweisen.

+0

Aber ich muss an der Auswahl arbeiten. Gibt es einen Weg, wie es für ausgewählten Code gehandhabt werden kann? – user2091061

+0

Ihr Code funktioniert nicht mit der Benutzerauswahl - er wählt einen Zellbereich aus und fügt ihn ein. Im Allgemeinen ist es besser, nur in diesen Bereich einzufügen, anstatt ihn zuerst auszuwählen. Wenn Sie jedoch mit der Benutzerauswahl arbeiten möchten - möchten Sie die Auswahl kopieren oder in die Auswahl einfügen? Um in die Auswahl einzufügen, benutzen Sie '.Range (.Cells (DataStartRow - 1, 1), .Cells (DataStartRow - 1, 4)). Copy Destination: = Selection' um aus der Auswahl zu kopieren, benutzen Sie' Selection.Copy Destination: = res.Cells (9, 1) '(Sie können den' With..End With' Block in diesem letzten Fall verlieren. –

+0

Ich habe meine Antwort mit auskommentiertem Code auf Copy/Paste mit der Auswahl aktualisiert ... Ich würde nicht Ich traue dem Benutzer nicht, die richtige Auswahl zu treffen (es gibt viele Fehler zwischen Tastatur und Stuhl). –

Verwandte Themen