Страницы: 1
RSS
Преобразование формул в значения vba
 
Добрый день. Необходимо при изменении значения в ячейках столбца1 (Таблица2[Столбец1]) преобразовать строку с формулами в значения. При выполнении макроса цикл не заканчивается и уходит в ошибку.
Помогите подкорректировать макрос.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Set KeyCells = Range("Таблица2[Столбец1]")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
        Range(ActiveCell, ActiveCell.End(xlToRight)).Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
        ActiveCell.Offset(2, 0).Select
End If
End Sub

 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Set KeyCells = Range("Таблица2[Столбец1]")
    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
        Application.EnableEvents = False
        Range(ActiveCell, ActiveCell.End(xlToRight)).Copy
        ActiveCell.PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
        ActiveCell.Select
        Application.EnableEvents = True
    End If
End Sub
 
New, Огромное спасибо!)
 
Отвлекся. Ну, раз уж написал, положу

Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Set KeyCells = Range("Таблица2[Столбец1]")
    If Not Intersect(KeyCells, Target) Is Nothing Then
        nc_ = Range(Target, Target.End(xlToRight)).Columns.Count
        Application.EnableEvents = 0
        Target.Resize(, nc_) = Target.Resize(, nc_).Value
        Application.EnableEvents = 1
    End If
End Sub
Изменено: _Boroda_ - 14.07.2022 13:04:48
Скажи мне, кудесник, любимец ба’гов...

 
_Boroda_, Огромное спасибо!)
 
Метод, указанный в #4, может ошибочно отрабатывать при определенных условиях - см. выводы к сообщению.
Владимир
 
20 лет так делаю - при правильном использовании ни разу никаких косяков не было. Да, они могут быть, но нужно понимать, когда можно .Value, а когда да, лучше PasteSpecial использовать
Кстати, не проверял, но думаю, что Копи-Паст помедленнее будет
Скажи мне, кудесник, любимец ба’гов...

 
Цитата
_Boroda_ написал:
ни разу никаких косяков не было
Старая шутка: системные администраторы делятся на тех, кто не делает резервных копий, и на тех, кто уже их делает.  :)
Владимир
 
sokol92, бэкап нужен везде, где возможен  :D
Сохраняться ручками Excel тоже быстро учит  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
_Boroda_ написал:
Копи-Паст помедленнее будет
однозначно. Но есть ситуации, когда без него никуда: например, при переносе слишком большого массива значений. VBA с .Value в этом случае может запросто выдать ошибку "Out of memory", особенно на 32-битных системах. Связано с тем, что Range.Value = Range.Value происходит через создание промежуточного массива из .Value и его обратной выгрузки. И при этом "неделимой" памяти для создания такого массива "на лету" может не хватить. PasteSpecial учитывает этот нюанс и при нехватки памяти вставляет значения частями, которые можно поместить в память безошибочно.
Поэтому в своих коммерческих проектах часто жертвую скоростью ради стабильности.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Но есть ситуации, когда без него никуда
Конечно. Потому и написал
Цитата
_Boroda_ написал:
при правильном использовании
:D
Скажи мне, кудесник, любимец ба’гов...

Страницы: 1
Читают тему (гостей: 1)
Наверх