2016-05-04 2 views
0

Я выполняю упражнения расчета отходов на работе, и у меня есть несколько динамических названных диапазонов, чьи ячейки содержат значения, полученные по формулам. Мне нужен модуль, который скопирует значения в динамическом именованном диапазоне на другой лист, не копируя сами формулы, а только значения, которые содержат ячейки. Я попытался использовать это:Как скопировать значения в динамический именованный диапазон?

Sub Sample() 
    Dim wsI As Worksheet, wsO As Worksheet 

    Set wsI = ThisWorkbook.Sheets("Sheet1") 
    Set wsO = ThisWorkbook.Sheets("Sheet1") 

    wsI.Range("Pct_waste").Copy wsO.Range("B4") 

End Sub 

Но это копирует формулы, которые бесполезны. И я не могу просто использовать абсолютные ссылки, потому что мне нужно иметь возможность быстро добавлять новые данные. В конечном счете, я намереваюсь создать макрос, который скопирует значения в динамических именованных диапазонах на новый лист, а затем отсортирует эти значения численно и построит их на диаграмме рассеяния. Поэтому мне нужно найти способ скопировать все значения в динамических именованных диапазонах без копирования самих формул.

Кроме того, я довольно новичок, когда дело доходит до VBA, так что легко!

ответ

0

Попробуйте вставить только значение:

Sub Sample() 

Dim wsI As Worksheet, wsO As Worksheet 

Set wsI = ThisWorkbook.Sheets("Sheet1") 
Set wsO = ThisWorkbook.Sheets("Sheet1") 

wsI.Range("Pct_waste").Copy 
wsO.Range("B4").PasteSpecial xlPasteValues 

End Sub 
+1

Почему я не думал о том, что я не знаю. Большое вам спасибо, вы спасатель жизни! –

0

или что-то вроде этого

Sub test() 

Dim r As Excel.Range 
Dim i As Integer 

Set r = Range("test_range") 

For i = 1 To r.Cells.Count 
    Range("x" & i).Value = r.Cells(i, 1).Value 
Next i 

End Sub 

или вы могли бы сделать что-то вроде этого, как статической формулы в листе, = индекс (range_name, строки ($ A $ 1: $ A1), 1) и заполнить, также ловушка ошибок с использованием IFERRROR, это будет неподвижным.

1

Используйте .Resize() метод:

Set wsI = ThisWorkbook.Sheets("Sheet1") 
Set wsO = ThisWorkbook.Sheets("Sheet1") 

With wsI.Range("Pct_waste") 
    wsO.Range("B4").Resize(.Rows.Count, .Columns.Count).Value = .Value 
End With 
Смежные вопросы