Здравствуйте!
Подскажите, пожалуйста, как можно вставить скопированные ячейки с другой книги в конкретные ячейки так, чтобы при при вставке данных, вставка данных была только как значения, при этом не нажимаю специальную вставку. Грубо говоря через ctrl C - ctrl V и сразу как значения, так как объем данных приходит в большом потоке и нужно быстро его обработать, в какой-то момент можно упустить специальная вставка значения и все слетает.
Суть проблемы заключается в том, что если случайно один раз вставить не так скопированные данные, в диапазон С6:С37, то результата расчета стоимости работ не будет, и в дальнейшем появляются ошибки (код работает некорректно и выводит либо не все, либо не то).
В ячейках С7:С37 есть функция ВПР, это берется из другой вкладки, и при копировании аналогичных символов, в ячейку С7 "Вид работы" ВПР перестает работать, потому что ссылка идет на ВПР из другого файла где аналогичные названия.
Подскажите, пожалуйста, как можно уйти от этой проблемы? Часть информации поместилась по объему символов именно в сам ВПР поэтому там такой ошибки как в ячейке C7 не возникает, а вот длинные названия не помещаются в ВПР из-за этого при копирование идет ссылка на другую книгу, а в текущей ВПР уже не работает.
Пытался как-то сделать через подобный макрос, но ничего не срабатывало:
Код |
---|
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Dim changedCells As Range
Dim cell As Range
' Проверяем, была ли изменена ячейка из именованного диапазона "Work"
If Not Intersect(Target, Range("Work")) Is Nothing Then ' ЗАКРАСКА ЯЧЕЕК ЗЕЛЕНЫМ ЦВЕТОМ
ApplyColorBasedOnWorkCell
End If
' Проверяем, была ли вставка в диапазон C6:C34
Set changedCells = Intersect(Target, Me.Range("C6:C34"))
If Not changedCells Is Nothing Then
Application.EnableEvents = False ' Отключаем события
' Преобразуем вставленные данные в значения
changedCells.Value = changedCells.Value
Application.EnableEvents = True ' Включаем события обратно
End If
' Устанавливаем диапазон для форматирования (C6:C37)
Set rng = Me.Range("C6:C37") ' Весь диапазон
' Проверяем, была ли изменена ячейка в нашем диапазоне
If Not Intersect(Target, rng) Is Nothing Then
Application.EnableEvents = False ' Временно отключаем обработку событий для предотвращения рекурсии
' Обрабатываем каждую измененную ячейку в пересечении Target и нашего диапазона
For Each cell In Intersect(Target, rng)
' Применяем форматирование в зависимости от адреса ячейки
Select Case cell.Address
' Для ячеек C15 и C16 устанавливаем числовой формат без десятичных
Case "$C$15", "$C$16":
cell.NumberFormat = "0"
' Для ячеек C35 и C36 устанавливаем формат даты
Case "$C$35", "$C$36":
cell.NumberFormat = "DD.MM.YYYY"
' Для всех остальных ячеек в диапазоне устанавливаем текстовый формат
Case Else:
cell.NumberFormat = "@"
End Select
Next cell
Application.EnableEvents = True ' Включаем обработку событий обратно
End If
' ДОБАВЛЕННЫЙ КОД ДЛЯ ФОРМАТИРОВАНИЯ ШРИФТА В ДИАПАЗОНЕ C3:C38
' Проверяем, была ли изменена ячейка в диапазоне C3:C38
If Not Intersect(Target, Me.Range("C3:C38")) Is Nothing Then
Application.EnableEvents = False ' Временно отключаем события
' Обрабатываем каждую измененную ячейку в диапазоне
For Each cell In Intersect(Target, Me.Range("C3:C38"))
' Устанавливаем шрифт Times New Roman
cell.Font.Name = "Times New Roman"
' Устанавливаем размер шрифта 14
cell.Font.Size = 14
Next cell
Application.EnableEvents = True ' Включаем события обратно
End If
End Sub
|
: