2012-10-10 19 views
5

Tengo el siguiente código, que funciona bien para copiar las células completas a su nuevo destino.Utilizando rangos, ¿cómo puedo hacer que una pasta .COPY DESTINATION como VALUES

Dim ws As Worksheet, rng As Range 

Set ws = Sheets("Duplicates") 
Set rng = ws.Range("A2") 

rng.Copy Destination:=Range("A2:A" & Range("G" & Rows.Count).End(xlUp).Row) 
  1. ¿Es posible hacer que hacer frente un paste special.
  2. ¿O es que necesito dividir el copiar/pegar en dos líneas usando un rango de dos objetos ?

EDIT:

derecho, hemos llegado a la conclusión de que no se puede tener una pasta especial en la misma línea como una copia. Lo que también descubrí es que quizás no quieras hacerlo de todos modos.

Si copia una fórmula del Registro 1 y la pega en todos los registros como VALUES, obtendrá el valor de la fórmula para el primer registro copiado.

Esto no es lo que quería. Entonces debe copiar las fórmulas a todos los registros como fórmulas, luego copie esas fórmulas y pegue como valores.


Dim ws As Worksheet, rng As Range 
Set ws = Sheets("Duplicates") 

establecer la primera gama (célula individual con fórmula) y copiar/pegar el contenido a la parte inferior de la hoja de cálculo basado en Col G:

Set rng = ws.Range("A2") 
rng.Copy Destination:=Range("A2:A" & Range("G" & Rows.Count).End(xlUp).Row) 

Seleccione la formule recién pegado , desde la segunda fila hacia abajo. Copiarlos A continuación, pegue los contenidos como valores en el mismo lugar.

Set rng = ws.Range("A3:A" & Range("G" & Rows.Count).End(xlUp).Row) 
rng.Copy 
rng.PasteSpecial (xlPasteValues) 
Application.CutCopyMode = False 
+2

Ver una respuesta anterior que escribí aquí: http: // stackoverflow .com/questions/12721781/worksheet-paste-values-save-as-then-return-the-original-file-using-vba/12723462 # 12723462 – mattboy

+0

Gracias @mattboy, pero eso no responde totalmente a mi pregunta. Quiero que la línea única pegue una especial. es posible? – aSystemOverload

+0

No es que yo sepa. Si es posible, me encantaría saberlo, ¡ojalá alguien tenga una respuesta! – mattboy

Respuesta

2

Como alternativa, sólo puede asignar valores de rango sin necesidad de utilizar copia & pegar:

Set r1 = Range("D1", "D7") 
Set r2 = Range("E1", "E7") 

r2.Value = r1.Value ' copies current values from one range to another 

después de esta asignación, el rango de valores de r2 tendrá fórmulas incluso si no tiene forumlas r1.

En su caso, tal vez:

rng.Value = rng.Value 

(una vez que se haya establecido RNG para el tamaño correcto como usted ha anotado)

Cuestiones relacionadas