Страницы: 1
RSS
VBA копирование только значений и удаление
 
Форумчане и знатоки мира VBA, прошу помощи разобраться, так как сам 0 без палочки в этой вселенной.
Спасибо DANIKOLA, который придумал вот это:
в модуль ЭтаКнига:
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.OnKey "^c"
    Application.OnKey "^v"
End Sub

Private Sub Workbook_Open()
    Application.OnKey "^c", "SaveValue"
    Application.OnKey "^v", "GetValue"
End Sub
В модуль Module1:
Код
Sub SaveValue()
    SaveSetting "Clipboard", "clipBoardVal", "actualvalue", ActiveCell.Value
    ActiveCell.ClearContents
End Sub
Sub GetValue()
    ActiveCell.Value = GetSetting("Clipboard", "clipBoardVal", "actualvalue", "")
End Sub
Всё работает как нужно, но есть одно но
При выделении нескольких ячеек копирует только значение стоящее в ячейке с которой начато выделение.
Возможно ли решить это как то?
Или исправить код, чтобы:
Выделяю ячейку А1, при начатии Ctrl+c происходит копирование с ячеек A1:G1, т.е. протягивается диапазон на 6 клеток вправо
Но строки могут быть любые, не только 1, вплоть до 5000
И сохранить функцию вырезки только значений и вставки, вся суть этого макроса

Это предыдущая тема: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=162998&a...
 
Попробуйте этот файл:cp2.xlsm (21.17 КБ)
 
Цитата
написал:
Выделяю ячейку А1, при начатии Ctrl+c происходит копирование с ячеек A1:G1, т.е. протягивается диапазон на 6 клеток вправоНо строки могут быть любые, не только 1, вплоть до 5000
Воспользуйтесь файлом который любезно предоставил:
Цитата
DANIKOLA
Тут в Range стоит от выбранной ячейки до Range("G" & ActiveCell.Row). Замените Range("G" & ActiveCell.Row) на Seletcion
Код
Set rngSource = Range(Selection, Selection) 
Код
Sub SaveValue()
    Dim wbTempName$, rngSource As Range, rngDestination As Range
    Let wbTempName = GetSetting("Temp", "tempFileForCopy", "tmpfilename", "")
    Set wbTemp = Workbooks(wbTempName) 
    Set rngSource = Range(Selection, Range("G" & ActiveCell.Row)) ' Эта строчка тут!
    wbTemp.Worksheets(1).Cells.Clear
    rngSource.Copy wbTemp.Worksheets(1).Range("A1")
    rngSource.ClearContents
    wbTemp.Worksheets(1).Range("A1").CurrentRegion.ClearFormats
End Sub
....Если надо объяснять, то не надо объяснять!
Для связи https://t.me/c4egga
 
Цитата
Chegga написал:
Замените Range("G" & ActiveCell.Row) на Seletcion
Цитата
Chegga написал:
Set rngSource = Range(Selection, Selection)
Зачем такие сложности?
Если так хочется именно переменную, то достаточно
Код
Set rngSource = Selection
Согласие есть продукт при полном непротивлении сторон.

Контакты, благодарности
 
Цитата
WSugar написал(в ЛС):
Вопрос на засыпку, подскажите пожалуйста, что поправить в коде, чтобы он не стирал условное форматирование по книге, при копировании и вставке очищается всё, вплоть до формата ячейки - дата, переводится всё в стандартный шрифт и т.д.
Попробуйте исправить на это:
Код
Sub GetValue()
    Dim wbTempName$, rngSource As Range, rngDestination As Range
    Let wbTempName = GetSetting("Temp", "tempFileForCopy", "tmpfilename", "")
    Set wbTemp = Workbooks(wbTempName)
    Set rngSource = wbTemp.Worksheets(1).Range("A1").CurrentRegion
    rngSource.Copy 'Здесь
    ActiveCell.PasteSpecial (xlPasteValues) 'и здесь
    Application.ScreenUpdating = True
End Sub
 
Цитата
написал:
Попробуйте исправить на это:КодSub GetValue()
   Dim wbTempName$, rngSource As Range, rngDestination As Range
   Let wbTempName = GetSetting("Temp", "tempFileForCopy", "tmpfilename", "")
   Set wbTemp = Workbooks(wbTempName)
   Set rngSource = wbTemp.Worksheets(1).Range("A1").CurrentRegion
   rngSource.Copy 'Здесь
   ActiveCell.PasteSpecial (xlPasteValues) 'и здесь
   Application.ScreenUpdating = True
End Sub

В данный момент, поправил, тестирую, пока что всё работает именно так как и хотелось всегда, пока что не обнаружено косяков, через пару дней еще отпишусь, возможно что то обнаружится, но надеюсь что не будет проблем.
Детская эйфория
 
Выхожу на связь после рабочих будней, обнаружен один нюанс, встаю в ячейку а1 условно, копирую, вставляю и не копируются данные после пустой ясейки, если по пути до столбца G встречается пустая ячейка.
т.е. Копируется все если заполнены все ячейки, но если встречается пустая, пусть в D1 пусто, а в E1 есть данные, то при копировании с ячейки Е1 данные не копируются
 
WSugar
Цитата
Копируется все если заполнены все ячейки, но если встречается пустая, пусть в D1 пусто, а в E1 есть данные, то при копировании с ячейки Е1 данные не копируются
Если используете код из сообщения 5 то так и должно быть. Там используется CurrentRegion. По русски текущая область, чтобы понять, что это сочетание клавиш для выделения этой области  CTRL+SHIFT+ПРОБЕЛ.
Страницы: 1
Наверх