Макрос excel вставить только значения

 

Друзья,  

  Есть такой простенький макрос. Как изменить его, чтобы он вставлял только значения ячеек а не формулы?  

  Sub Button1_Click()  
Dim Rng As Range  
Dim rCell As Range  
Dim LastRow As Long  
Set Rng = Selection  
LastRow = Cells(Rows.Count, 1).End(xlUp).Row  
  For Each rCell In Rng  
     If Not IsEmpty(rCell) Then  
        rCell.Copy Cells(LastRow + 1, 1)  
        LastRow = LastRow + 1  
      End If  
  Next  
End Sub

 

McCinly

Пользователь

Сообщений: 278
Регистрация: 01.01.1970

Sub Button1_Click()  
Dim Rng As Range  
Dim rCell As Range  
Dim LastRow As Long  
Set Rng = Selection  
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ skipBlanks:=False, Transpose:=False  
End Sub

 

McCinly

Пользователь

Сообщений: 278
Регистрация: 01.01.1970

Sub Button1_Click()  
Dim Rng As Range  
Set Rng = Selection  
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ skipBlanks:=False, Transpose:=False  
End Sub  

  Даже так

 

{quote}{login=McCinly}{date=13.02.2010 03:27}{thema=}{post}Sub Button1_Click()  
Dim Rng As Range  
Set Rng = Selection  
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ skipBlanks:=False, Transpose:=False  
End Sub  

  Даже так{/post}{/quote}  

  спасибо, но вот эта строчка не проходит  
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _ skipBlanks:=False, Transpose:=False

 

McCinly

Пользователь

Сообщений: 278
Регистрация: 01.01.1970

Подчеркивание это перенос строки, его надо убрать.  

  Выделяете ячейки для копирования потом ctrl-c, ставите куда надо жмете кнопку, вставляются значения.

 

{quote}{login=McCinly}{date=13.02.2010 03:44}{thema=}{post}Подчеркивание это перенос строки, его надо убрать.  

  Выделяете ячейки для копирования потом ctrl-c, ставите куда надо жмете кнопку, вставляются значения.{/post}{/quote}  

  да нет… я не это имел ввиду )). Вы взгляните на верхний скрипт… он вот отсюда  

http://www.planetaexcel.ru/forum.php?thread_id=13439&forum_id=129&page_forum=lastpage&allnum_forum=0#post98825

 

Guest

Гость

#7

13.02.2010 15:56:39

{quote}{login=The_Prist}{date=13.02.2010 03:52}{thema=}{post}Sub Button1_Click()  
Dim rCell As Range  
Dim LastRow As Long  
For Each rCell In Selection  
If Not IsEmpty(rCell) Then  
LastRow = Cells(Rows.Count, 1).End(xlUp).Row+1  
rCell.Copy    
Cells(LastRow, 1).PasteSpecial Paste:=xlPasteValues  
End If  
Next  
End Sub{/post}{/quote}  

  супер! надеюсь что это будет еще кому-то полезно кроме меня!  
спасибо!

Данный код добавляет в контекстное меню ячейки два новых действия:

1. Вставить только значения;
2. Вставить значения с транспонированием.

Нижеуказанный макрос лучше всего поместить в «личную книгу макросов» (PERSONAL)

В модуль «ЭтаКнига» файла PERSONAL вставляем:

Private Sub Workbook_Open()
  MyComBars
End sub

Также создаем новый модуль (в книге PERSONAL), в который помещаем следующий код:

Option Private Module
 
Sub MyComBars()
     Application.CommandBars("cell").Reset    'возвращаем стандартный ComBars
    With Application.CommandBars("cell").Controls.Add(Type:=1, Before:=5)
         .OnAction = "PasteValues"    ' назначаем кнопке макрос
        .Caption = "Вставить значения"
     End With
 
     With Application.CommandBars("cell").Controls.Add(Type:=1, Before:=6)
         .OnAction = "PasteTranspose"    ' назначаем кнопке макрос
        .Caption = "Вставить с транспонированием"
     End With
End Sub
 
Sub PasteValues()
On Error Resume Next
     Selection.PasteSpecial Paste:=xlPasteValues
End Sub
 
Sub PasteTranspose()
On Error Resume Next
     Selection.PasteSpecial Paste:=xlPasteAll, Transpose:=True
End Sub

by LightZ
 

  • 22781 просмотр

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.

Специальная вставка (метод PasteSpecial объекта Range) применяется в VBA Excel для вставки ячеек из буфера обмена с учетом заданных параметров.

Range.PasteSpecial (специальная вставка) – это метод, который вставляет диапазон ячеек, скопированный в буфер обмена, из буфера обмена в указанное место на рабочем листе с учетом заданных параметров специальной вставки.

Синтаксис

Range.PasteSpecial (Paste, Operation, SkipBlanks, Transpose)

Специальная вставка работает только с данными ячеек, скопированными в буфер обмена методом Range.Copy. При попытке применить метод Range.PasteSpecial к ячейкам, вырезанным в буфер обмена методом Range.Cut, возникает ошибка.

Параметры специальной вставки

Список параметров метода Range.PasteSpecial:

Параметры Описание
Paste Необязательный параметр. Константа из коллекции XlPasteType, указывающая на часть данных вставляемого диапазона, которую следует вставить. По умолчанию вставляются все данные.
Operation Необязательный параметр. Константа из коллекции XlPasteSpecialOperation, указывающая на математические операции, которые следует провести со скопированными данными и данными в ячейках назначения. По умолчанию вычисления не производятся.
SkipBlanks Необязательный параметр. Булево значение, которое указывает, вставлять ли в конечный диапазон пустые ячейки: True – не вставлять, False – вставлять (значение по умолчанию).
Transpose Необязательный параметр. Булево значение, которое указывает, следует ли транспонировать строки и столбцы при вставке диапазона: True – транспонировать, False – не транспонировать (значение по умолчанию).

Смотрите другой способ транспонировать диапазоны ячеек и двумерные массивы.

Константы XlPasteType

Список констант из коллекции XlPasteType, которые могут быть использованы в качестве аргумента параметра Paste:

Константа Значение Описание
xlPasteAll -4104 Вставка всех данных (по умолчанию).
xlPasteAllExceptBorders 7 Вставка всех данных, кроме границ.
xlPasteAllMergingConditionalFormats 14 Вставка всех данных со слиянием условных форматов исходного и нового диапазонов.
xlPasteAllUsingSourceTheme 13 Вставка всех данных с использованием исходной темы.
xlPasteColumnWidths 8 Вставка ширины столбцов.
xlPasteComments -4144 Вставка комментариев.
xlPasteFormats -4122 Вставка форматов исходного диапазона.
xlPasteFormulas -4123 Вставка формул.
xlPasteFormulasAndNumberFormats 11 Вставка формул и форматов чисел.
xlPasteValidation 6 Вставка правил проверки данных из ячеек исходного диапазона в новый диапазон.
xlPasteValues -4163 Вставка значений.
xlPasteValuesAndNumberFormats 12 Вставка значений и форматов чисел.

Константы XlPasteSpecialOperation

Список констант из коллекции XlPasteSpecialOperation, которые могут быть использованы в качестве аргумента параметра Operation:

Константа Значение Описание
xlPasteSpecialOperationAdd 2 Скопированные данные будут добавлены к значениям в ячейках назначения.
xlPasteSpecialOperationDivide 5 Скопированные данные разделят значения в ячейках назначения.
xlPasteSpecialOperationMultiply 4 Скопированные данные будут перемножены со значениями в ячейках назначения.
xlPasteSpecialOperationNone -4142 Вычисления не выполняются при вставке данных (по умолчанию).
xlPasteSpecialOperationSubtract 3 Скопированные данные будут вычтены из значений в ячейках назначения.

Примеры

Примеры копирования и специальной вставки актуальны для диапазона "A1:B8" активного листа, ячейки которого заполнены числами:

‘Копирование диапазона ячеек в буфер обмена:

Range(«A1:B8»).Copy

‘Специальная вставка только значений:

Range(«D1»).PasteSpecial Paste:=xlPasteValues

‘Специальная вставка с делением значений ячеек конечного

‘диапазона на значения ячеек диапазона из буфера обмена:

Range(«D1»).PasteSpecial Operation:=xlPasteSpecialOperationDivide

‘Специальная вставка только значений с транспонированием строк и столбцов:

Range(«G1»).PasteSpecial Paste:=xlPasteValues, Transpose:=True


I’m trying to copy values from a table to a Range, in Excel using vba Macros, but I dont want the table format, only its values. How can I achieve this?

Here is part of the code:

    '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

asked Jun 18, 2014 at 20:59

pablo.vix's user avatar

You can skip the copy command altogether by assigning the values of the source range to your destination range:

'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

answered Jun 19, 2014 at 12:47

MP24's user avatar

MP24MP24

3,07721 silver badges23 bronze badges

1

I believe you are looking for the functionality of pasting values. You can record it, or use what I have done below. (from recording so selecting is in there, which will make it run slower, but you aren’t looping so it is only constant time being added).

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

answered Jun 18, 2014 at 21:11

Kory's user avatar

KoryKory

3081 silver badge7 bronze badges

1

I assume you want to copy from «Sheet1» to «Sheet1» — of course you can make this a parameter and loop through all your sheets

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

answered Oct 8, 2018 at 17:20

pbou's user avatar

pboupbou

2782 silver badges13 bronze badges

You need to use the pastespecial command as shown below.

'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

answered Jun 18, 2014 at 21:15

gtwebb's user avatar

gtwebbgtwebb

2,9713 gold badges13 silver badges22 bronze badges

r.Copy
dest.pastespecial xlPastevalues

answered Jun 18, 2014 at 21:19

user2649602's user avatar

1

I achieve a solution that works.

There follows the code:

    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

answered Jun 20, 2014 at 15:28

pablo.vix's user avatar

pablo.vixpablo.vix

2,0432 gold badges15 silver badges12 bronze badges

Use the Range.Value method. Its like setting a variable a = 1. Where you think of it as copying 1 to a. So…

Range2.value = Range1.value

or

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

Here I’m copying some data in worksheet actual to some historical worksheet. Or if you prefer setting the value of one range to another range.

Saurabh Bhandari's user avatar

answered Jan 30, 2018 at 4:08

RHH1095's user avatar

RHH1095RHH1095

791 silver badge4 bronze badges

You can skip the copy command altogether as MP24 said .. his suggestion worked for me after modifyibg the last line from «value» to «formula» as follows

Set r = Sheets(«Sheet1»).Range(«Table1»)
Set dest = Range(.Cells(linhaAtual, 1), .Cells(linhaAtual +
r.Rows.Count — 1, 5))

dest.formula = r.formula

answered Aug 1, 2022 at 6:42

Jawali M's user avatar

Pekin

1

Копировать только значения

11.02.2013, 12:00. Показов 32794. Ответов 4

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день.

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

PureBasic
1
Sheets("Sheets"1).Range(sCopyAddress).Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol)

Что надо изменить в этой строке, чтобы вставлялись только значения?

Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

11.02.2013, 12:00

4

Скрипт

5468 / 1148 / 50

Регистрация: 15.09.2012

Сообщений: 3,514

11.02.2013, 12:14

2

Вариант № 1:

Visual Basic
1
2
3
4
5
6
Sub Procedure_1()
 
    Range("A1").Copy
    Range("B1").PasteSpecial Paste:=xlPasteValues
 
End Sub

Вариант № 2:

Visual Basic
1
2
3
4
5
Sub Procedure_2()
 
    Range("B1").Value = Range("A1").Value
 
End Sub

Примечание

С большими диапазонами ячеек быстрее работает PasteSpecial, чем второй вариант.



1



Pekin

11.02.2013, 12:26

3

@Скрипт

Спасибо за предлагаемые решения.

Моя проблема в том, что мне необходимо минимально изменить приведенный код, поскольку весь код громоздкий и используется множество команд (в приведенном коде, например, используется Offset) и вероятность проблем с новым кодом высока

Хотел бы увидеть предложение к конкретному коду (именно по нему не могу найти как выполнить данную задачу)

Watcher_1

356 / 162 / 27

Регистрация: 21.06.2011

Сообщений: 350

11.02.2013, 12:40

4

Visual Basic
1
2
Sheets("Sheets1").Range(sCopyAddress).Copy
wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial Paste:=xlPasteValues



1



2 / 2 / 0

Регистрация: 15.10.2019

Сообщений: 46

16.10.2019, 09:20

5

не работает…

пишет ошибку expected end of statement



0



Понравилась статья? Поделить с друзьями:
  • Макрос excel в ворд
  • Макрос excel в exe
  • Макрос excel range value
  • Макрос excel if then else
  • Макрос as excel application