Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Что бывает специальная вставка только значения – знаю, а бывает ли копирование специальным в макросе?
 

Добрый день всем! Для начала спасибо этому сайту за бесценные примеры и ответы на форуме, благодаря которым я учусь!

Я пытаюсь создать макрос, который из открытой книги (всегда с разными именами и в разных местах) будет копировать заполненные столбцы   в конкретную книгу «учет комплектаций1». Копировать в первую пустую строку после заполненной. До этого момента все работает.

Но мне нужно в Столбец «А» заполнять название «Объекта» этой комплектации. – тут проблема. Во-первых не могу правильно определить количество строк, которое макрос вычисляет. Но главный вопрос!:

Бывает ли какое-нибудь Range(…).Value.Copy ? Что бывает специальная вставка только значения – знаю, а бывает ли копирование специальным? (только значения?)   А то у меня из-за объединенной ячейки в исходнике стирается пол таблицы в приемнике…  

Прикрепляю файлы, копирую макрос (который создала благодаря советам специалистов на форумах… Спасибо им большое!)

Изменено: Анна Важенина - 6 Сен 2018 12:54:29
 
Код
Sub выгрузить()
'ЭТОТ МАКРОС ГЛАВНЫЙ ! Копирует таблицы в первую пустую ячейку
 Application.ScreenUpdating = False
 
 Dim Sh1 As Worksheet
 Set Sh1 = ActiveSheet
 
 MsgBox "Файл 'учет комплектаций1'" & IIf(IsBookOpen("\\SERVER\...\учет комплектаций1.xlsx"), " уже открыт", " не занят")

 Sh1.Activate
Dim Rk, Rk0 ''назначение переменных  РАБОТАЕТ!!!
Rk = Columns("A").Rows(65000).End(xlUp).Row '''' определение первой пустой ячейки в колонке А
Range("A20:I" & Rk).Select '' выбор блока ячеек в текущем листе
Selection.Copy '' копирование выбранного
Workbooks.Open Filename:="\\SERVER\...\учет комплектаций1.xlsx"

Dim Sh2 As Worksheet
Set Sh2 = ActiveSheet

Rk0 = Columns("B").Rows(65000).End(xlUp).Row '' тоже самое определение первой пустой ячейки (точнее последней заполненной)
 
 
Range("B" & Rk0 + 1).Select '' а вот здесь выбор первой пустой
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False '' вставка из буфера


Sh1.Activate
   Range("E2").Select
   Selection.Copy
Workbooks("учет комплектаций1.xlsx").Activate
Range("A" & Rk0 + 1 & ":A" & Rk0 + 1 + Rk - 20).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
Application.CutCopyMode = False   ' очистка буфера обмена

      
      ActiveWorkbook.Save
 Application.ScreenUpdating = True
 
End Sub
Изменено: Анна Важенина - 6 Сен 2018 12:52:03
 
Цитата
Анна Важенина написал:
Бывает ли какое-нибудь Range(…).Value.Copy
Всё, что можно интерфейсом, можно и на VBA :)
Код
Range(Ваш_диапазон).Copy
Cells(начальная_ячейка_вставки).PasteSpecial xlPasteValues
Application.CopyCutMode=False
Изменено: StoTisteg - 6 Сен 2018 11:08:21
 
Цитата
Анна Важенина написал: А то у меня из-за объединенной ячейки в исходнике стирается пол таблицы в приемнике…
Вот он корень Вашей проблемы. Никакое 'специальное' копирование Вам не поможет. Объединенные ячейки - ЗЛО для работы с данными.
Цитата
Анна Важенина написал: Бывает ли какое-нибудь Range(…).Value.Copy
Бывает
Код
myArr = Range("A1:D100").Value
где в переменную myArr заносятся только и именно ЗНАЧЕНИЯ из диапазона. Ну а дальше выгружайте его так и куда Вам нужно
Согласие есть продукт при полном непротивлении сторон.
 
И да, насчёт объединённых ячеек Sanja прав, избавьтесь от них.
 
StoTisteg, вопрос в другом (насколько я понял)
Цитата
Анна Важенина написал: Что бывает специальная вставка только значения – знаю, а бывает ли копирование специальным?
не во вставке, а в копировании
Согласие есть продукт при полном непротивлении сторон.
 
StoTisteg,Sanja  спасибо, буду пробовать. И думать как в документации, которая должна выглядеть красиво обойтись без объединения. Наверное над макросами заполения в шаблон придется думать....
 
да не во вставке а в копировании
 
Цитата
Анна Важенина написал:
должна выглядеть красиво
Тогда у Вас один вариант — перенос значений прямым перебором в цикле, типа так:
Код
Cells(1,1).Value=Ws.Cells(1,1).Value
Но это, как Вы понимаете, жуткий и медлительный костыль...
Изменено: StoTisteg - 6 Сен 2018 11:22:22
 
Цитата
Анна Важенина написал:
И думать как в документации, которая должна выглядеть красиво обойтись без объединения.
Тут особо думать не нужно, просто делайте как во вложении и без объединения, и "красиво".
 
Цитата
PooHkrd написал:
Тут особо думать не нужно, просто делайте как во вложении и без объединения, и "красиво".
Супер! Я даже не знала, что можно выбирать по "центру выделения!!!!"
 
Жаль что по вертикали так нельзя. Но думаю, вам и этого хватит.
 
Анна Важенина, код следует оформлять соответствующим тегом - посмотрите, как он выглядит у других. Ищите такую кнопку <...> и исправьте свой #2.
Тег VBA.jpg (19.2 КБ)
 
Цитата
Анна Важенина написал:
Супер! Я даже не знала, что можно выбирать по "центру выделения!!!!"
Кстати, в Excel 95 и более ранних не было возможности объединять ячейки, и даже на панели инструментов в соответствующем месте была кнопка "по центру выделения".
 
Анна Важенина,  если копировать данные через массив - то ему по барабану все эти форматирования/объединения, массив смотрит только на позицию данных в ячейках, как будто объединения нет.
Вот например пообъединяйте что-то в начале таблицы до столбца M, выделите это, затем выполните макрос
Код
Sub tt()
    Dim a
    a = Selection.Value
    [m1].Resize(UBound(a), UBound(a, 2)).Value = a
End Sub

увидите как расположатся данные.
Впрочем если тормоэнуть код сразу после того, как данные помещены в массив - его содержание можно посмотреть в окне Locals.
Изменено: Hugo - 7 Сен 2018 12:39:05
 
Цитата
Hugo написал:
если копировать данные через массив
Спасибо большое! я догадывалась, что можно копировать значения, но нигде не могла найти понятный пример. Возможности экселя безграничны...
 
Цитата
Анна Важенина написал: я догадывалась, что можно копировать значения, но нигде не могла найти понятный пример
Я Вам тоже самое, что и Hugo, показал еще в своем первом сообщении(#4)
Согласие есть продукт при полном непротивлении сторон.
 
Цитата
Sanja написал:
Я Вам тоже самое, что и  Hugo , показал еще в своем первом сообщении(#4)
Просто мне как новичку полный пример понятнее как у себя применить и проверить... :)))
Страницы: 1
Читают тему (гостей: 1)
Наверх