Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/В место формул макрос в диапазоне ячеек при любых изменениях - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
В место формул макрос в диапазоне ячеек при любых изменениях
lebensvoll Дата: Среда, 03.04.2019, 08:16 | Сообщение № 1
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Доброе утро, многоуважаемые форумчане...
Прошу помощи, подсказки.
Как решить задачу.
Есть таблица с данными, оператор вносит линейные размеры и как только они начинаются вноситься или же изменяться то в графе "Площадь образца" в место формулы срабатывал макрос а в место значений остались лишь цифры...
По аналогии 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]
Но также увы
:'(
Как быть помогите, спасибо огромное заранее
К сообщению приложен файл: 7336849.xlsm (16.3 Kb)


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Среда, 03.04.2019, 08:46
 
Ответить
СообщениеДоброе утро, многоуважаемые форумчане...
Прошу помощи, подсказки.
Как решить задачу.
Есть таблица с данными, оператор вносит линейные размеры и как только они начинаются вноситься или же изменяться то в графе "Площадь образца" в место формулы срабатывал макрос а в место значений остались лишь цифры...
По аналогии 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
Дата добавления - 03.04.2019 в 08:16
skais Дата: Среда, 03.04.2019, 09:45 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 29 ±
Замечаний: 20% ±

Excel 2010
[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
[/vba]


Сообщение отредактировал skais - Среда, 03.04.2019, 09:57
 
Ответить
Сообщение[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
[/vba]

Автор - skais
Дата добавления - 03.04.2019 в 09:45
_Boroda_ Дата: Среда, 03.04.2019, 10:02 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
[vba]
Код
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
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
[vba]
Код
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
[/vba]

Автор - _Boroda_
Дата добавления - 03.04.2019 в 10:02
krosav4ig Дата: Среда, 03.04.2019, 10:18 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 997 ±
Замечаний: 0% ±

Excel 2007,2010,2013
[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
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщение[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
[/vba]

Автор - krosav4ig
Дата добавления - 03.04.2019 в 10:18
lebensvoll Дата: Среда, 03.04.2019, 10:21 | Сообщение № 5
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, спасибо огромное!!!
[vba]
Код
If Not Intersect(Target, Range("A6:D9")) Is Nothing Then
[/vba]
Блин.... А я ведь думал что
[vba]
Код
If Target.Address = "A6:C9" Then
[/vba]
Это не для диапазона. А для адреса одной определенной ячейки
В очередной раз понимаю что я НУ ОЧЕНЬ ОЧЕНЬ не ВНИМАТЕЛЬНЫЙ
Спасибо Вам огромнейшее и Вам тоже skais,
krosav4ig, :o нееее это вы прям самим кодом производите вычисление. Для меня это вообще темный лес. Сложное восприятие плюс ко всему еще и совмещать макросы.
Я же потом еще буду продолжать вычисления.
Но все равно спасибо!!!


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Среда, 03.04.2019, 10:24
 
Ответить
Сообщение_Boroda_, спасибо огромное!!!
[vba]
Код
If Not Intersect(Target, Range("A6:D9")) Is Nothing Then
[/vba]
Блин.... А я ведь думал что
[vba]
Код
If Target.Address = "A6:C9" Then
[/vba]
Это не для диапазона. А для адреса одной определенной ячейки
В очередной раз понимаю что я НУ ОЧЕНЬ ОЧЕНЬ не ВНИМАТЕЛЬНЫЙ
Спасибо Вам огромнейшее и Вам тоже skais,
krosav4ig, :o нееее это вы прям самим кодом производите вычисление. Для меня это вообще темный лес. Сложное восприятие плюс ко всему еще и совмещать макросы.
Я же потом еще буду продолжать вычисления.
Но все равно спасибо!!!

Автор - lebensvoll
Дата добавления - 03.04.2019 в 10:21
skais Дата: Среда, 03.04.2019, 10:21 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 236
Репутация: 29 ±
Замечаний: 20% ±

Excel 2010
_Boroda_ Вы имеете ввиду показывать только проблемную часть? Ну один
[vba]
Код
Application.EnableEvents = 1
[/vba] затисался, забыл убрать, коменты пользователя - может ему нужны. Отключение событий у Вас лучше не спорю.

lebensvoll у Вас и включение/отключение событий не было верным.


Сообщение отредактировал skais - Среда, 03.04.2019, 10:23
 
Ответить
Сообщение_Boroda_ Вы имеете ввиду показывать только проблемную часть? Ну один
[vba]
Код
Application.EnableEvents = 1
[/vba] затисался, забыл убрать, коменты пользователя - может ему нужны. Отключение событий у Вас лучше не спорю.

lebensvoll у Вас и включение/отключение событий не было верным.

Автор - skais
Дата добавления - 03.04.2019 в 10:21
_Boroda_ Дата: Среда, 03.04.2019, 10:42 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16718
Репутация: 6505 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
затисался, забыл убрать, коменты пользователя - может ему нужны. Отключение событий у Вас лучше не спорю.
lebensvoll у Вас и включение/отключение событий не было верным.

То, что внизу затесалось еще одно включение событий - это как раз фигня (как и комменты), лучше два раза, чем ни одного. А вот то, что выключаем события до проверки измененного диапазона - вот это уже плохо. Отключили, дальше пошла ошибка, макрос вылетел, а событие так и не включили. А ошибка будет хотя бы из-за отсутствия is Nothing (Вы видимо его потом добавили, но сначала его не было). Да мало ли из-за чего она может случиться? Кстати, лучше даже после With отключать. А вот Александру можно так писать, он еще учится :D
Ну и диапазон A:D, а не А:С


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
затисался, забыл убрать, коменты пользователя - может ему нужны. Отключение событий у Вас лучше не спорю.
lebensvoll у Вас и включение/отключение событий не было верным.

То, что внизу затесалось еще одно включение событий - это как раз фигня (как и комменты), лучше два раза, чем ни одного. А вот то, что выключаем события до проверки измененного диапазона - вот это уже плохо. Отключили, дальше пошла ошибка, макрос вылетел, а событие так и не включили. А ошибка будет хотя бы из-за отсутствия is Nothing (Вы видимо его потом добавили, но сначала его не было). Да мало ли из-за чего она может случиться? Кстати, лучше даже после With отключать. А вот Александру можно так писать, он еще учится :D
Ну и диапазон A:D, а не А:С

Автор - _Boroda_
Дата добавления - 03.04.2019 в 10:42
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!