Как скопировать только значения в Excel vba из диапазона?

#excel #vba #copy #range

#excel #vba #Копировать #диапазон

Вопрос:

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

Вот часть кода:

     'Source range
    Set r = Sheets("Sheet1").Range("Table1")

    'Destination range
    Set dest = Range(.Cells(linhaAtual, 1), .Cells(linhaAtual   r.Rows.Count - 1, 5))

    r.Copy Destination:= dest
  

Ответ №1:

Вы можете вообще пропустить команду копирования, присвоив значения исходного диапазона вашему целевому диапазону:

 'Source range
Set r = Sheets("Sheet1").Range("Table1")
'Destination range
Set dest = Range(.Cells(linhaAtual, 1), .Cells(linhaAtual   r.Rows.Count - 1, 5))

dest.Value = r.Value
  

Комментарии:

1. Я пробовал это, но это показало мне другую проблему. Я использовал такие значения, как «значение 1». Используя этот метод, когда значение было скопировано, оно стало «значением 1», исчезая первый символ «‘». Не то, что я хочу, это должно быть точно такое же значение.

Ответ №2:

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

 Selection.Copy
        'Select your destination like range("destination").select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
  

Комментарии:

1. Рад, что смог помочь! Если бы я предоставил вам лучший ответ, выбор моего ответа, щелкнув галочку, принес бы мне большую пользу! Я только начинаю работать на этом сайте, и важно получить начальную репутацию! Спасибо!

Ответ №3:

Я предполагаю, что вы хотите скопировать из «Sheet1» в «Sheet1» — конечно, вы можете сделать это параметром и перебирать все свои листы

 Dim rSource as range 'Source Range
Dim rDest as range   'Target Range - It should be the same dimension
Dim wbSource as workbook 'Source Workbook
Dim wbTarget as workbook 'Target Workbook
Dim myRange as string

myRange = "A:G" ' It is an example, you can make it dynamic

'add new workbook
    Workbooks.Add
    Set wbTarget = ActiveWorkbook

'Set the Source Range
    Set rSource = wbSource.Sheets("Sheet1").Range(myRange)

'Destination Range
    Set rDest = wbTarget.Sheets("Sheet1").Range(myRange)

'Copy values only
    rSource.Copy
    rDest.PasteSpecial xlPasteValues
  

Ответ №4:

Вам нужно использовать специальную команду pastespecial, как показано ниже.

 'Source range
Set r = Sheets("Sheet1").Range("Table1")

'Destination range
Set dest = Range(.Cells(linhaAtual, 1), .Cells(linhaAtual   r.Rows.Count - 1, 5))

r.Copy 
dest.pastespecial paste:=xlPasteValues
  

Ответ №5:

 r.Copy
dest.pastespecial xlPastevalues
  

Комментарии:

1. Вместо того, чтобы просто публиковать фрагмент кода, вы должны расширить свой ответ, чтобы объяснить, что вы делаете и почему он отвечает на вопрос OP.

Ответ №6:

Я добился решения, которое работает.

Далее следует код:

     Set r = Sheets("Criteria").Range("CriteriaTable")

    Set dest = Range(.Cells(linhaAtual, 1), .Cells(linhaAtual   r.Rows.Count - 1, 5))
    Sheets("Criteria").Activate
    r.Select
    Selection.Copy
    Sheets("Load").Activate
    dest.Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  

Ответ №7:

Используйте диапазон.Метод значений. Это похоже на настройку a variable a = 1 . Где вы думаете об этом как о копировании 1 в a. So…

 Range2.value = Range1.value
  

или

 Worksheets("historical").Range("A1:F15").Value =  Worksheets("actuals").Range("A1:F15").Value
  

Здесь я копирую некоторые данные с рабочего листа, актуальные для некоторого исторического листа. Или, если вы предпочитаете, установите значение одного диапазона в другой диапазон.

Ответ №8:

Вы можете вообще пропустить команду копирования, как сказал MP24.. его предложение сработало для меня после изменения последней строки с «значения» на «формулу» следующим образом

Установите r = Sheets(«Sheet1»).Range(«Table1») Установите dest = Range(.Ячейки (linhaAtual, 1), .Ячейки (linhaAtual r.Строки.Количество — 1, 5))

dest.formula = r.formula