Доброе утро, многоуважаемые форумчане... Прошу помощи, подсказки. Как решить задачу. Есть таблица с данными, оператор вносит линейные размеры и как только они начинаются вноситься или же изменяться то в графе "Площадь образца" в место формулы срабатывал макрос а в место значений остались лишь цифры... По аналогии My WebPage из предыдущих работ сделал так: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = 0 'при любых изменениях размеров образцов "Площадь образца =" With Range("E6:E9") .FormulaR1C1 _ "=ROUND(RC[-4]*RC[-2]/100,0)" .Formula = .Value End With Application.EnableEvents = 1 End Sub
[/vba] Но увы формула остается в диапазоне "E6:E9"... Попробовал так вот [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = 0 'при любых изменениях размеров образцов "Площадь образца =" If Target.Address = "A6:C9" Then With Range("E6:E9") .FormulaR1C1 = _ "=ROUND(RC[-4]*RC[-2]/100,0)" .Value = .Value End With Application.EnableEvents = 1 End If End Sub
[/vba] Но также увы
Как быть помогите, спасибо огромное заранее
Доброе утро, многоуважаемые форумчане... Прошу помощи, подсказки. Как решить задачу. Есть таблица с данными, оператор вносит линейные размеры и как только они начинаются вноситься или же изменяться то в графе "Площадь образца" в место формулы срабатывал макрос а в место значений остались лишь цифры... По аналогии My WebPage из предыдущих работ сделал так: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = 0 'при любых изменениях размеров образцов "Площадь образца =" With Range("E6:E9") .FormulaR1C1 _ "=ROUND(RC[-4]*RC[-2]/100,0)" .Formula = .Value End With Application.EnableEvents = 1 End Sub
[/vba] Но увы формула остается в диапазоне "E6:E9"... Попробовал так вот [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = 0 'при любых изменениях размеров образцов "Площадь образца =" If Target.Address = "A6:C9" Then With Range("E6:E9") .FormulaR1C1 = _ "=ROUND(RC[-4]*RC[-2]/100,0)" .Value = .Value End With Application.EnableEvents = 1 End If End Sub
[/vba] Но также увы
Как быть помогите, спасибо огромное заранееlebensvoll
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = 0 'при любых изменениях размеров образцов "Площадь образца =" If Not Intersect(Target, Range("A6:C9")) Is Nothing Then With Range("E6:E9") .FormulaR1C1 = _ "=ROUND(RC[-4]*RC[-2]/100,0)" .Value = .Value End With Application.EnableEvents = 1 End If Application.EnableEvents = 1 End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = 0 'при любых изменениях размеров образцов "Площадь образца =" If Not Intersect(Target, Range("A6:C9")) Is Nothing Then With Range("E6:E9") .FormulaR1C1 = _ "=ROUND(RC[-4]*RC[-2]/100,0)" .Value = .Value End With Application.EnableEvents = 1 End If Application.EnableEvents = 1 End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = 0 'при любых изменениях размеров образцов "Площадь образца =" If Not Intersect(Target, Range("A6:C9")) Then With Range("E6:E9") .FormulaR1C1 = _ "=ROUND(RC[-4]*RC[-2]/100,0)" .Value = .Value End With Application.EnableEvents = 1 End If Application.EnableEvents = 1 End Sub
[/vba]
Сколько отличий? [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A6:D9")) Is Nothing Then Application.EnableEvents = 0 With Range("E6:E9") .FormulaR1C1 = "=ROUND(RC[-4]*RC[-2]/100,0)" .Value = .Value End With Application.EnableEvents = 1 End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = 0 'при любых изменениях размеров образцов "Площадь образца =" If Not Intersect(Target, Range("A6:C9")) Then With Range("E6:E9") .FormulaR1C1 = _ "=ROUND(RC[-4]*RC[-2]/100,0)" .Value = .Value End With Application.EnableEvents = 1 End If Application.EnableEvents = 1 End Sub
[/vba]
Сколько отличий? [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A6:D9")) Is Nothing Then Application.EnableEvents = 0 With Range("E6:E9") .FormulaR1C1 = "=ROUND(RC[-4]*RC[-2]/100,0)" .Value = .Value End With Application.EnableEvents = 1 End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim ar As Range, arr As Variant On Error Resume Next 'при любых изменениях размеров образцов "Площадь образца =" With Me.UsedRange.Columns("A:D") For Each ar In Intersect(.Offset(5), .Cells, Target).Areas With ar.Offset(, .Column - ar.Column).Resize(, 5) arr = .Value For i = 1 To .Rows.Count arr(i, 5) = Round(arr(i, 1) * arr(i, 3) / 100, 0) Next Application.EnableEvents = 0 .Value = arr Application.EnableEvents = 1 End With Next End With End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim ar As Range, arr As Variant On Error Resume Next 'при любых изменениях размеров образцов "Площадь образца =" With Me.UsedRange.Columns("A:D") For Each ar In Intersect(.Offset(5), .Cells, Target).Areas With ar.Offset(, .Column - ar.Column).Resize(, 5) arr = .Value For i = 1 To .Rows.Count arr(i, 5) = Round(arr(i, 1) * arr(i, 3) / 100, 0) Next Application.EnableEvents = 0 .Value = arr Application.EnableEvents = 1 End With Next End With End Sub
If Not Intersect(Target, Range("A6:D9")) Is Nothing Then
[/vba] Блин.... А я ведь думал что [vba]
Код
If Target.Address = "A6:C9" Then
[/vba] Это не для диапазона. А для адреса одной определенной ячейки В очередной раз понимаю что я НУ ОЧЕНЬ ОЧЕНЬ не ВНИМАТЕЛЬНЫЙ Спасибо Вам огромнейшее и Вам тоже skais, krosav4ig, нееее это вы прям самим кодом производите вычисление. Для меня это вообще темный лес. Сложное восприятие плюс ко всему еще и совмещать макросы. Я же потом еще буду продолжать вычисления. Но все равно спасибо!!!
_Boroda_, спасибо огромное!!! [vba]
Код
If Not Intersect(Target, Range("A6:D9")) Is Nothing Then
[/vba] Блин.... А я ведь думал что [vba]
Код
If Target.Address = "A6:C9" Then
[/vba] Это не для диапазона. А для адреса одной определенной ячейки В очередной раз понимаю что я НУ ОЧЕНЬ ОЧЕНЬ не ВНИМАТЕЛЬНЫЙ Спасибо Вам огромнейшее и Вам тоже skais, krosav4ig, нееее это вы прям самим кодом производите вычисление. Для меня это вообще темный лес. Сложное восприятие плюс ко всему еще и совмещать макросы. Я же потом еще буду продолжать вычисления. Но все равно спасибо!!!lebensvoll
Кто бы ты ни был, мир в твоих руках
Сообщение отредактировал lebensvoll - Среда, 03.04.2019, 10:24
затисался, забыл убрать, коменты пользователя - может ему нужны. Отключение событий у Вас лучше не спорю. lebensvoll у Вас и включение/отключение событий не было верным.
То, что внизу затесалось еще одно включение событий - это как раз фигня (как и комменты), лучше два раза, чем ни одного. А вот то, что выключаем события до проверки измененного диапазона - вот это уже плохо. Отключили, дальше пошла ошибка, макрос вылетел, а событие так и не включили. А ошибка будет хотя бы из-за отсутствия is Nothing (Вы видимо его потом добавили, но сначала его не было). Да мало ли из-за чего она может случиться? Кстати, лучше даже после With отключать. А вот Александру можно так писать, он еще учится Ну и диапазон A:D, а не А:С
затисался, забыл убрать, коменты пользователя - может ему нужны. Отключение событий у Вас лучше не спорю. lebensvoll у Вас и включение/отключение событий не было верным.
То, что внизу затесалось еще одно включение событий - это как раз фигня (как и комменты), лучше два раза, чем ни одного. А вот то, что выключаем события до проверки измененного диапазона - вот это уже плохо. Отключили, дальше пошла ошибка, макрос вылетел, а событие так и не включили. А ошибка будет хотя бы из-за отсутствия is Nothing (Вы видимо его потом добавили, но сначала его не было). Да мало ли из-за чего она может случиться? Кстати, лучше даже после With отключать. А вот Александру можно так писать, он еще учится Ну и диапазон A:D, а не А:С_Boroda_