Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
29.03.2024, 10:53:12

Войти
Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Вставка только значений при помощи макроса
Страниц: [1] 2  Все   Вниз
Печать
Автор Тема: Вставка только значений при помощи макроса  (Прочитано 73062 раз)
0 Пользователей и 1 Гость смотрят эту тему.
miruff
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« : 31.01.2012, 13:58:03 »

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

Суть проблемы в следующем: необходимо копировать массив ячеек с одного листа (каждая ячейка содержит формулы) на другой лист, но вставить только значения. У меня получается чтобы вставляло только вместе с формулами  Грустный Вот фрагмент макроса:
Код:
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)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #1 : 31.01.2012, 14:12:30 »

Код:
Range("B51:J54").Copy
Worksheets("Лист2").Range("B56").PasteSpecial Paste:=xlPasteValues
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
miruff
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« Ответ #2 : 31.01.2012, 14:34:01 »

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

Как только проверил код увидел, столкнулся со следующим, в оригинале имеет информацию в форме:
1
2
3
Т.е. несколько строк в ячейке (через Alt+Enter), после вставки вид имею в 1 строку и через квадраты (видимо так возвращает значение энтера), но при попытке редактирования ячейки он видит что там разделение по строкам. При этом на экране я вижу данные в 1 строку и на печать естественно так же выходит. С эти можно как то бороться?
 
« Последнее редактирование: 07.07.2017, 23:06:42 от vikttur » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #3 : 31.01.2012, 14:41:58 »

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

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

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
miruff
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« Ответ #4 : 31.01.2012, 15:16:56 »

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

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #5 : 31.01.2012, 15:35:37 »

Тогда еще проще:
Код:
Range("A1:D45").Replace Chr(10)," ", xlPart, , False
Только диапазон свой укажете.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
miruff
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« Ответ #6 : 31.01.2012, 16:31:19 »

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

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

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« Ответ #7 : 06.02.2012, 16:02:18 »

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

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

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

Репутация: +112/-0
Офлайн Офлайн

Сообщений: 2 077



Просмотр профиля E-mail
« Ответ #8 : 07.02.2012, 10:08:24 »

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

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« Ответ #9 : 08.02.2012, 14:48:01 »

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

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 29

453267453
Просмотр профиля E-mail
« Ответ #10 : 15.02.2012, 08:25:07 »

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

Не забываем отписываться в соответствующей теме помогло ли Вам предложенное мною решение проблемы.
Yandex money 41001814249450
vmugue
Новичок
*

Репутация: +1/-0
Офлайн Офлайн

Сообщений: 9


Просмотр профиля E-mail
« Ответ #11 : 17.02.2012, 00:36:26 »

Код:
Sub pasteAsValue()
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
End Sub
« Последнее редактирование: 07.07.2017, 23:07:09 от vikttur » Записан
Notrussian
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 29

453267453
Просмотр профиля E-mail
« Ответ #12 : 21.02.2012, 03:35:15 »

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

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

Не забываем отписываться в соответствующей теме помогло ли Вам предложенное мною решение проблемы.
Yandex money 41001814249450
barxan
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 31

Шайтан Бархан


Просмотр профиля E-mail
« Ответ #13 : 21.02.2012, 06:45:31 »

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

Шайтан Бархан
Notrussian
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 29

453267453
Просмотр профиля E-mail
« Ответ #14 : 21.02.2012, 07:10:34 »

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

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

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

Не забываем отписываться в соответствующей теме помогло ли Вам предложенное мною решение проблемы.
Yandex money 41001814249450
Страниц: [1] 2  Все   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru