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

Вход

Регистрация

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

 

= Мир MS Excel/Восстановить формулу после изменения - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Восстановить формулу после изменения (Макросы/Sub)
Восстановить формулу после изменения
Marisa Дата: Вторник, 19.01.2016, 23:10 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте. Очень нужна помощь. Есть 3 ячейки с формулами и значение каждой зависит от 2-х других. Если вводим значение в A1, то В1=А1*20 и С1=В1*10 (это условно). Нужен макрос, который в зависимости от того в какую ячейку из трех вносятся данные в двух других прописывал бы формулы.
 
Ответить
СообщениеЗдравствуйте. Очень нужна помощь. Есть 3 ячейки с формулами и значение каждой зависит от 2-х других. Если вводим значение в A1, то В1=А1*20 и С1=В1*10 (это условно). Нужен макрос, который в зависимости от того в какую ячейку из трех вносятся данные в двух других прописывал бы формулы.

Автор - Marisa
Дата добавления - 19.01.2016 в 23:10
gling Дата: Вторник, 19.01.2016, 23:34 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1402
Репутация: 343 ±
Замечаний: 0% ±

2010
Здравствуйте. Вставьте это в модуль листа. Это вставляет формулы.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("A1").Address Then
Range("B1").FormulaR1C1 = "=RC[-1]*20"
Range("C1").FormulaR1C1 = "=RC[-1]*10"
End If
End Sub
[/vba]
Это считает без формул
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("A1").Address Then
Target(1, 2) = Target * 20
Target(1, 3) = Target * 200
End If
End Sub
[/vba]


Сообщение отредактировал gling - Вторник, 19.01.2016, 23:35
 
Ответить
СообщениеЗдравствуйте. Вставьте это в модуль листа. Это вставляет формулы.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("A1").Address Then
Range("B1").FormulaR1C1 = "=RC[-1]*20"
Range("C1").FormulaR1C1 = "=RC[-1]*10"
End If
End Sub
[/vba]
Это считает без формул
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("A1").Address Then
Target(1, 2) = Target * 20
Target(1, 3) = Target * 200
End If
End Sub
[/vba]

Автор - gling
Дата добавления - 19.01.2016 в 23:34
Marisa Дата: Среда, 20.01.2016, 00:44 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Спасибо за отклик! Я наверно слишком упростила условия (думала дальше сама допилю), но не получается. Хотелось бы чтобы то что я дописала работало. Помогите, пожалуйста.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("B2").Address Then
Target(1, 3) = [B2] * 20
Target(1, 5) = [B2] * 30
End If
If Target.Address = Range("D2").Address Then
Target(1, 3) = [D2] * 20
Target(1, -1) = [D2] * 30
End If
If Target.Address = Range("F2").Address Then
Target(1, -3) = [F2] * 20
Target(1, -5) = [F2] * 30
End If
End Sub
[/vba]


Сообщение отредактировал Marisa - Среда, 20.01.2016, 13:12
 
Ответить
СообщениеСпасибо за отклик! Я наверно слишком упростила условия (думала дальше сама допилю), но не получается. Хотелось бы чтобы то что я дописала работало. Помогите, пожалуйста.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("B2").Address Then
Target(1, 3) = [B2] * 20
Target(1, 5) = [B2] * 30
End If
If Target.Address = Range("D2").Address Then
Target(1, 3) = [D2] * 20
Target(1, -1) = [D2] * 30
End If
If Target.Address = Range("F2").Address Then
Target(1, -3) = [F2] * 20
Target(1, -5) = [F2] * 30
End If
End Sub
[/vba]

Автор - Marisa
Дата добавления - 20.01.2016 в 00:44
Udik Дата: Среда, 20.01.2016, 13:44 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1300
Репутация: 162 ±
Замечаний: 0% ±

Excel 2013
Ну вот база для дальнейших экспериментов :)
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With ActiveSheet
Select Case Target.Address
Case Range("B2").Address
    .Cells(1, 3) = [B2] * 20
    .Cells(1, 5) = [B2] * 30
Case Range("D2").Address
    .Cells(1, 3) = [D2] * 20
    .Cells(1, 5) = [D2] * 30
Case Range("F2").Address
    .Cells(1, 3) = [F2] * 20
    .Cells(1, 5) = [F2] * 30
End Select
End With
Application.EnableEvents = True

End Sub
[/vba]
К сообщению приложен файл: 3288883.xlsm(18Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеНу вот база для дальнейших экспериментов :)
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With ActiveSheet
Select Case Target.Address
Case Range("B2").Address
    .Cells(1, 3) = [B2] * 20
    .Cells(1, 5) = [B2] * 30
Case Range("D2").Address
    .Cells(1, 3) = [D2] * 20
    .Cells(1, 5) = [D2] * 30
Case Range("F2").Address
    .Cells(1, 3) = [F2] * 20
    .Cells(1, 5) = [F2] * 30
End Select
End With
Application.EnableEvents = True

End Sub
[/vba]

Автор - Udik
Дата добавления - 20.01.2016 в 13:44
RAN Дата: Среда, 20.01.2016, 14:53 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4301
Репутация: 839 ±
Замечаний: 0% ±

2010
:)
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i&, j&
    If Target.Count > 1 Then Exit Sub
    If Target.Address(0, 0) = "B2" Then
        i = 4
        j = 6
    ElseIf Target.Address(0, 0) = "D2" Then
        i = 2
        j = 6
    ElseIf Target.Address(0, 0) = "F2" Then
        i = 2
        j = 4
    Else
        Exit Sub
    End If
    Application.EnableEvents = False
    Cells(2, i).Formula = "=" & Target.Address(0, 0) & "*20"
    Cells(2, j).Formula = "=" & Target.Address(0, 0) & "*30"
    Application.EnableEvents = True
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение:)
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i&, j&
    If Target.Count > 1 Then Exit Sub
    If Target.Address(0, 0) = "B2" Then
        i = 4
        j = 6
    ElseIf Target.Address(0, 0) = "D2" Then
        i = 2
        j = 6
    ElseIf Target.Address(0, 0) = "F2" Then
        i = 2
        j = 4
    Else
        Exit Sub
    End If
    Application.EnableEvents = False
    Cells(2, i).Formula = "=" & Target.Address(0, 0) & "*20"
    Cells(2, j).Formula = "=" & Target.Address(0, 0) & "*30"
    Application.EnableEvents = True
End Sub
[/vba]

Автор - RAN
Дата добавления - 20.01.2016 в 14:53
Marisa Дата: Среда, 20.01.2016, 17:57 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Всем спасибо за помощь! Все получилось! Надеюсь что и я когда-нибудь буду отвечать на этом форуме, а не спрашивать (я этого очень хочу) :) Всем удачи!
 
Ответить
СообщениеВсем спасибо за помощь! Все получилось! Надеюсь что и я когда-нибудь буду отвечать на этом форуме, а не спрашивать (я этого очень хочу) :) Всем удачи!

Автор - Marisa
Дата добавления - 20.01.2016 в 17:57
Marisa Дата: Четверг, 21.01.2016, 12:56 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Уважаемые форумчане, вот мой код (созданный с вашей помощью), который отлично работает на Windows
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With ActiveSheet
Select Case Target.Address
Case Range("B2").Address
    .Cells(2, 4) = [B2] * [K6]
    .Cells(2, 6) = [B2] * [K6] * [N6]
Case Range("D2").Address
    .Cells(2, 2) = [D2] / [K6]
    .Cells(2, 6) = [D2] * [N6]
Case Range("F2").Address
    .Cells(2, 2) = ([F2] / [N6]) / [K6]
    .Cells(2, 4) = [F2] / [N6]
End Select
End With
Application.EnableEvents = True

End Sub
[/vba]
но на Mac он почему-то не работает. Помогите, пожалуйста еще разок.
 
Ответить
СообщениеУважаемые форумчане, вот мой код (созданный с вашей помощью), который отлично работает на Windows
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With ActiveSheet
Select Case Target.Address
Case Range("B2").Address
    .Cells(2, 4) = [B2] * [K6]
    .Cells(2, 6) = [B2] * [K6] * [N6]
Case Range("D2").Address
    .Cells(2, 2) = [D2] / [K6]
    .Cells(2, 6) = [D2] * [N6]
Case Range("F2").Address
    .Cells(2, 2) = ([F2] / [N6]) / [K6]
    .Cells(2, 4) = [F2] / [N6]
End Select
End With
Application.EnableEvents = True

End Sub
[/vba]
но на Mac он почему-то не работает. Помогите, пожалуйста еще разок.

Автор - Marisa
Дата добавления - 21.01.2016 в 12:56
Pelena Дата: Четверг, 21.01.2016, 13:06 | Сообщение № 8
Группа: Модераторы
Ранг: Экселист
Сообщений: 10462
Репутация: 2362 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
На Мас он тоже работает, только нужно сделать новый файл именно на Мас, добавить макрос в модуль листа тоже на Мас и сохранить на Мас
К сообщению приложен файл: MAC.xls(40Kb)


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеНа Мас он тоже работает, только нужно сделать новый файл именно на Мас, добавить макрос в модуль листа тоже на Мас и сохранить на Мас

Автор - Pelena
Дата добавления - 21.01.2016 в 13:06
Marisa Дата: Четверг, 21.01.2016, 18:47 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Pelena, скажите пожалуйста, вы создали этот файл в Mac Excel 15.14? Не может ли быть причина в том какой именно Excel установлен на компьютере с Mac OC?
 
Ответить
СообщениеPelena, скажите пожалуйста, вы создали этот файл в Mac Excel 15.14? Не может ли быть причина в том какой именно Excel установлен на компьютере с Mac OC?

Автор - Marisa
Дата добавления - 21.01.2016 в 18:47
Pelena Дата: Четверг, 21.01.2016, 18:55 | Сообщение № 10
Группа: Модераторы
Ранг: Экселист
Сообщений: 10462
Репутация: 2362 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
Нет, в 14.5.5
А разве в 15.14 есть возможность добавлять макросы? В 15.13 нет


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеНет, в 14.5.5
А разве в 15.14 есть возможность добавлять макросы? В 15.13 нет

Автор - Pelena
Дата добавления - 21.01.2016 в 18:55
Marisa Дата: Четверг, 21.01.2016, 19:13 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Как бы это проверить? Господа Экселисты, есть здесь кто-то, у кого установлен Mac Excel 15.14? Помогите, дело чести.
 
Ответить
СообщениеКак бы это проверить? Господа Экселисты, есть здесь кто-то, у кого установлен Mac Excel 15.14? Помогите, дело чести.

Автор - Marisa
Дата добавления - 21.01.2016 в 19:13
Pelena Дата: Четверг, 21.01.2016, 19:16 | Сообщение № 12
Группа: Модераторы
Ранг: Экселист
Сообщений: 10462
Репутация: 2362 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
Marisa, Вы не ответили на мой вопрос
в 15.14 есть возможность добавлять макросы?


И ещё. Чем вызван Ваш вопрос? Мой файл не работает у Вас?


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеMarisa, Вы не ответили на мой вопрос
в 15.14 есть возможность добавлять макросы?


И ещё. Чем вызван Ваш вопрос? Мой файл не работает у Вас?

Автор - Pelena
Дата добавления - 21.01.2016 в 19:16
Marisa Дата: Четверг, 21.01.2016, 19:27 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Pelena, Я никогда не работала на Mac, помогла человеку, написала пару макросов, один простой: стереть, копировать - работает, а этот, как он говорит, не работает, хотя на Windows он работает. Хотелось бы выяснить, если есть у кого-то на Mac ОС Excel 15.14, проверьте, пожалуйста.
 
Ответить
СообщениеPelena, Я никогда не работала на Mac, помогла человеку, написала пару макросов, один простой: стереть, копировать - работает, а этот, как он говорит, не работает, хотя на Windows он работает. Хотелось бы выяснить, если есть у кого-то на Mac ОС Excel 15.14, проверьте, пожалуйста.

Автор - Marisa
Дата добавления - 21.01.2016 в 19:27
Udik Дата: Четверг, 21.01.2016, 19:39 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1300
Репутация: 162 ±
Замечаний: 0% ±

Excel 2013
вот чего отыскалось:
Цитата
Не все версии содержат VBA. Home and Student, например

ну и сложные макросы могут не работать
Цитата
если идет создание объектов через обращение к библиотекам(таким Scripting, RegExp и пр.) через тот же CreateObject - 100% не заработает.

источник: Включение макросов на МАС


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщениевот чего отыскалось:
Цитата
Не все версии содержат VBA. Home and Student, например

ну и сложные макросы могут не работать
Цитата
если идет создание объектов через обращение к библиотекам(таким Scripting, RegExp и пр.) через тот же CreateObject - 100% не заработает.

источник: Включение макросов на МАС

Автор - Udik
Дата добавления - 21.01.2016 в 19:39
Pelena Дата: Четверг, 21.01.2016, 19:45 | Сообщение № 15
Группа: Модераторы
Ранг: Экселист
Сообщений: 10462
Репутация: 2362 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
В данном случае макрос несложный и он работает на 15.13.3 (Mac Excel 2016) b 14.5.5 (Mac Excel 2011)
Подтверждение - видео с экрана


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеВ данном случае макрос несложный и он работает на 15.13.3 (Mac Excel 2016) b 14.5.5 (Mac Excel 2011)
Подтверждение - видео с экрана

Автор - Pelena
Дата добавления - 21.01.2016 в 19:45
Marisa Дата: Четверг, 21.01.2016, 20:26 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Спасибо большое всем откликнувшимся. Удачи!


Сообщение отредактировал Marisa - Четверг, 21.01.2016, 21:01
 
Ответить
СообщениеСпасибо большое всем откликнувшимся. Удачи!

Автор - Marisa
Дата добавления - 21.01.2016 в 20:26
vikttur Дата: Воскресенье, 24.01.2016, 18:13 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 2042
Репутация: 355 ±
Замечаний: 0% ±

Marisa, на будущее (видел я Ваш файл :) )
ActiveSheet- в модуле листа писать не обязательно. При этом убрать точки перед ссылками.

Чтобы код не реагировал на все ячейки, добавить проверяемый диапазон. Вернее, код срабатывает, но не отключает события и не доходит до Select Case , если это не нужно.
Проверять можно не адрес, а столбец
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub

    If Not Application.Intersect(Range("B2,D2,F2,K6,N6"), Target) Is Nothing Then
        Application.EnableEvents = False
        
        Select Case Target.Column
        Case 2, 11
            ........................
        Case 4
            ........................
        Case 6
            ........................
        Case 14
            ........................
        End Select

        Application.EnableEvents = True
    End If
End Sub
[/vba]

Макрос - мало, нужно было добавить проверку данных в ячейках или обойти ошибки в макросе.
Например, вписали в ячейку B2 букву вместо числа. Код начинает работать, отключает события листа:
Application.EnableEvents = False
После этого - ошибка при математической операции с текстом. Имеем открытый Excel с отключенными событиями. Для продолжения работы - закрыть и открыть. Маленькая "свинья" пользователю.


Сообщение отредактировал vikttur - Воскресенье, 24.01.2016, 18:31
 
Ответить
СообщениеMarisa, на будущее (видел я Ваш файл :) )
ActiveSheet- в модуле листа писать не обязательно. При этом убрать точки перед ссылками.

Чтобы код не реагировал на все ячейки, добавить проверяемый диапазон. Вернее, код срабатывает, но не отключает события и не доходит до Select Case , если это не нужно.
Проверять можно не адрес, а столбец
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub

    If Not Application.Intersect(Range("B2,D2,F2,K6,N6"), Target) Is Nothing Then
        Application.EnableEvents = False
        
        Select Case Target.Column
        Case 2, 11
            ........................
        Case 4
            ........................
        Case 6
            ........................
        Case 14
            ........................
        End Select

        Application.EnableEvents = True
    End If
End Sub
[/vba]

Макрос - мало, нужно было добавить проверку данных в ячейках или обойти ошибки в макросе.
Например, вписали в ячейку B2 букву вместо числа. Код начинает работать, отключает события листа:
Application.EnableEvents = False
После этого - ошибка при математической операции с текстом. Имеем открытый Excel с отключенными событиями. Для продолжения работы - закрыть и открыть. Маленькая "свинья" пользователю.

Автор - vikttur
Дата добавления - 24.01.2016 в 18:13
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Восстановить формулу после изменения (Макросы/Sub)
Страница 1 из 11
Поиск:

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