Новости:

Форум на данный момент в стадии обновления. Если у Вас возникли проблемы со входом в свою учетную запись - просьба писать на email: info@excel-vba.ru

Главное меню

Вставка только значений при помощи макроса

Автор miruff, 31.01.2012, 14:58:03

« назад - далее »

miruff

День добрый всем!

Суть проблемы в следующем: необходимо копировать массив ячеек с одного листа (каждая ячейка содержит формулы) на другой лист, но вставить только значения. У меня получается чтобы вставляло только вместе с формулами  :( Вот фрагмент макроса:
Range("B3:J20").Select
Selection.Copy
Worksheets("Лист2").Paste Destination:=Worksheets("Лист2").Range("B3:J20")


Для проделывания на одном и том же листе вроде как понятно копировал, поставил фокус куда ставить и специальной вставкой вставил:
    Range("B51:J54").Select
    Selection.Copy
    Range("B56").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False


Как можно выйти из моего положения? Спасибо заранее!

Дмитрий Щербаков(The_Prist)

Range("B51:J54").Copy
Worksheets("Лист2").Range("B56").PasteSpecial Paste:=xlPasteValues
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

miruff

#2
Спасибо огромное за столь быстрый ответ!
Моя ошибка была:
Worksheets("Лист2").Range("B56").Select PasteSpecial:=xlPasteValues

Как только проверил код увидел, столкнулся со следующим, в оригинале имеет информацию в форме:
1
2
3
Т.е. несколько строк в ячейке (через Alt+Enter), после вставки вид имею в 1 строку и через квадраты (видимо так возвращает значение энтера), но при попытке редактирования ячейки он видит что там разделение по строкам. При этом на экране я вижу данные в 1 строку и на печать естественно так же выходит. С эти можно как то бороться?

Дмитрий Щербаков(The_Prist)

Способ борьбы напрямую зависит от того, что Вы хотите видеть в результате. Если перенос на строки, то выделяете ячейки-правая кнопка мыши-Формат ячеек-вкладка Выравнивание-галочку на Переносить по словам.

Если же переносы не нужны вообще, то можно выделить ячейки-Ctrl+H. Найти: зажимаете клавишу Alt и на цифровом блоке клавиатуры(отдельный цифровой блок справа от основного блока клавиатуры) набираете 010. Заменить на - пусто или пробел, в зависимости от того, на что хотите перенос заменить.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

miruff

Цитата: The_Prist от 31.01.2012, 15:41:58
Способ борьбы напрямую зависит от того, что Вы хотите видеть в результате. Если перенос на строки, то выделяете ячейки-правая кнопка мыши-Формат ячеек-вкладка Выравнивание-галочку на Переносить по словам.
спасибо! попробую это в макрос встроить, т.к. редактирование листа "Лист2" не должно требоваться (должно быть достаточно запустить макрос) .. такова задача =)

Дмитрий Щербаков(The_Prist)

Тогда еще проще:
Range("A1:D45").Replace Chr(10)," ", xlPart, , False
Только диапазон свой укажете.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

miruff

Мне надо было чтобы был перенос по строкам =)
Ну я вот так сделал:
Columns("D:J").Select
    With Selection
        .WrapText = True
    End With


Я свою глобальную задачу разбил на мелки и теперь пошагово пытаюсь победить =)
Глобальная задача это: написать макрос для подготовки данных к печати (включая рамку со штампом). Т.е. на "Лист1" забивают таблицу, а мне нужно её привести к нужному виду и после выполнения макроса лишь оставалось пустить на печать (либо все страницы либо необходимые). И всё это только средствами экселя =) Вот и пробую.

miruff

День добрый! Возник еще вопрос =) (не уверен, но возможно нужно было новую тему создавать)

На листе имеется несколько текстовых фигур ... например: повторяющиеся фигуры "Поле1" и "Поле2", я сначала вставляю их N-ое количество (в составе группы), а потом начинаю задавать им значения. Но понятное дело код будет находить первый элемент и задавать ему значение, т.к в результате получим что заполнена будет только первая пара фигуры, но значения будут те которые должны были быть в последней паре.

Как можно решить проблему? Может просто после заполнения переименовывать фигуры на случайные имена, чтобы следующий раз код находил уже следующую пару фигур? Если да, то как можно задать случайное имя фигуре?
Спасибо!

Юрий М

Перебирать циклом эти фигуры и присваивать им значения (имена?)

miruff

Столкнулся со следующей бедой. Мне на каждой странице выводимой на печать нужно выводить шапку (которая из себя представляет первые 2 строки листа). Но шапка актуальна только для столбцов B:J т.к. в стобце A содержится элемент который имеет отношение только к 1 листы (выводимому на печать). Я сделал вот так:
    With ActiveSheet.PageSetup
        .PrintTitleRows = "$1:$2"
        .PrintTitleColumns = "$B:$J"
    End With

Но на вторую страницу попадает фрагмент того элемента который в колонке А =( Что я не так делаю?

Notrussian

Подскажите пожалуйста, а каким образом изменить изготовленный Вами макрос чтобы он вставлял скопированные значения не в преодпределённую ячейку а в ту, в которой установлен курсор?
Пример: Мне необходимо вставить скопированные значения в ячейку А1, а завтра (другой массив, в из другого источника) в В387.
Не забываем отписываться в соответствующей теме помогло ли Вам предложенное мною решение проблемы.
Yandex money 41001814249450

vmugue

#11
Sub pasteAsValue()
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
End Sub

Notrussian

#12
Спасибо, но это несколько не то что бы хотелось получить. Почему то данный код вставляет только значения, но именно в тот диапазон в котором был скопирован массив. Давайте попробую изложить следующим образом:

В "КНИГА 1" в ячейках А1;В1;С1 стоят значения, в ячейке D1 стоит формула =сумм(А1:С1). Необходимо скопировать эти 4 ячейки (А1;В1;С1;D1) (неважно каким способом (привычнее CTRL+C) ) и вставить в "КНИГА 2" в диапазон ячеек с А365 по D365 скопированный массив в виде значений (без формул).
Не забываем отписываться в соответствующей теме помогло ли Вам предложенное мною решение проблемы.
Yandex money 41001814249450

barxan

#13
Здравствуйте.
Sub КопируемТолькоЗначения() 'В данном случае кода Книга2 по умолчанию должна быть уже открыта.
   Range("A1:D1").Select 'Выделяем небходимый диапазон ячеек
   Selection.Copy 'Копируем
   Windows("Книга2.xlsx").Activate 'Активируем уже открытую Книгу2
   Range("A365:D365").Select 'Указываем диапзон куда нужно вставить
   Selection.PasteSpecial Paste:=xlPasteValues 'Вставляем значения
End Sub
Шайтан Бархан

Notrussian

#14
Здравствуйте! Спасибо за старания, но упустили один момент который я впоследствии не повторил, попробую исправиться. поэтому укажу условия еще раз но уже без упущений:
Подскажите пожалуйста, а каким образом изменить изготовленный Вами макрос чтобы он вставлял скопированные значения не в преодпределённую ячейку а в ту, в которой установлен курсор?

В "КНИГА 1" в ячейках А1;В1;С1 стоят значения, в ячейке D1 стоит формула =сумм(А1:С1). Необходимо скопировать эти 4 ячейки (А1;В1;С1;D1) (неважно каким способом (привычнее CTRL+C) ) и вставить в "КНИГА 2" в диапазон ячеек с А365 по D365 скопированный массив в виде значений (без формул).

Причем макрос должен действовать не в отношении предопределенных ячеек, а вотношении выбранных в тот момент. Т.е. скопированного в буфер обмена массива и динамичной ячейки куда установлен курсор мыши. Причем координаты массива - ДИНАМИЧНЫ, координаты ячейки в которую должна осуществиться вставка ТОЛЬКО ЗНАЧЕНИЙ скопированного массива - ДИНАМИЧНЫ. Вроде бы изложил достаточно полно.
Не забываем отписываться в соответствующей теме помогло ли Вам предложенное мною решение проблемы.
Yandex money 41001814249450

Яндекс.Метрика Рейтинг@Mail.ru