2015-05-02 2 views
1

Я использую следующий код. Этот код копирует формулы ячейки в другой лист. Кто-нибудь знает, как я могу изменить его, чтобы просто скопировать значения ячеек, а не формулы?Копирование (только значение, а не формула) диапазон ячеек на другой лист в том же файле


sub copyRangeOver() 

    Dim i As Integer 
    i = 631 

    Dim copyRange As Range 
    Set copyRange = ThisWorkbook.Worksheets("Coupling xyz data").Range("J" & 1 & ":V" & i) 

    Dim countD As Integer 
    countD = 1 
    copyRange.Copy Destination:=Cells(countD, 1) 

    Dim j As Integer 
    j = 466 
    Set copyRange = ThisWorkbook.Worksheets("Spring xyz data").Range("J" & 1 & ":V" & j) 

    copyRange.Copy Destination:=Cells(i + 1, 1) 

End Sub 
+1

вам необходимо указать это с помощью '' xlValues' или PasteSpecial xlPasteValues' – AHC

ответ

3

Вы можете сделать перевод прямое значение, которое быстрее, чем Copy и Paste Special, значения и не связаны с буфером обмена.

Sub copyRangeOver() 

    Dim i As Long, j As Long, countD As Long 
    Dim copyRange As Range 

    i = 631 
    countD = 1 

    With ThisWorkbook.Worksheets("Coupling xyz data") 
     Set copyRange = .Range("J" & 1 & ":V" & i) 
     Cells(countD, 1).Resize(copyRange.Rows.Count, copyRange.Columns.Count) = _ 
      copyRange.Value 
    End With 

    j = 466 

    With ThisWorkbook.Worksheets("Spring xyz data") 
     Set copyRange = .Range("J" & 1 & ":V" & j) 
     Cells(i + 1, 1).Resize(copyRange.Rows.Count, copyRange.Columns.Count) = _ 
      copyRange.Value 
    End With 

End Sub 

Это дублирует предыдущие усилия, хотя мне кажется, что есть некоторая неясность в пункте назначения (ы) значений. Для строки, принимающей значения, вы используете i во втором и CountD в первом, но между ними нет связи.

+0

@Sushant - Если * countD * будет больше, чем * 1 *, я считаю, что вторым пунктом назначения должно быть «Ячейки (i + countD, 1) .Resize (...», чтобы пропустить вперед по первому – Jeeped

+0

Да, лучший подход, чем копирование и вставка – brettdj

0

Вам нужно pastespecial:

copyRange.Copy 
Cells(countD, 1).PasteSpecial Paste:=xlPasteValues 
+0

спасибо за ответ. Он работает отлично, но одна проблема. Ранее, после запуска макроса, активная ячейка всегда была бы последним выбором. Теперь с измененным кодом (после запуска макроса) содержимое с листа «Весна xyz» остается выделенным, а активная ячейка - A632. Как я могу сделать A1 активной ячейкой после запуска обновленного макроса? – Sushant

0

Это нормально, как это делается.

copyRange.Copy 
    Cells(i + 1, 1).PasteSpecial xlPasteValues 
    application.cutcopymode=0 
Смежные вопросы