Здравствуйте. Здесь, на форуме, мне помогли с созданием макроса, позволяющего увеличивать/уменьшать числа диапазона ячеек на определённый процент. Однако, если поместить диапазон ячеек, подлежащих изменению, в столбец "умной таблицы", работа макроса сопровождается нежелательными явлениями, возникающими при добавлении или удалении строк из таблицы. При добавлении новых строк, формулы в Столбце 5 не копируются в новые строки+появляются нули за пределами границ таблицы... При удалении строк опять же появляются лишние нули. Подскажите, пожалуйста, как исключить эти нежелательные моменты?
Здравствуйте. Здесь, на форуме, мне помогли с созданием макроса, позволяющего увеличивать/уменьшать числа диапазона ячеек на определённый процент. Однако, если поместить диапазон ячеек, подлежащих изменению, в столбец "умной таблицы", работа макроса сопровождается нежелательными явлениями, возникающими при добавлении или удалении строк из таблицы. При добавлении новых строк, формулы в Столбце 5 не копируются в новые строки+появляются нули за пределами границ таблицы... При удалении строк опять же появляются лишние нули. Подскажите, пожалуйста, как исключить эти нежелательные моменты?Xpert
Открыл файл, Там 4 модуля с непонятными макросами, + код в модуле лмста. Отсутствие желания разбираться, какой код не работает, привело к автоматическому закрытию файла.
Открыл файл, Там 4 модуля с непонятными макросами, + код в модуле лмста. Отсутствие желания разбираться, какой код не работает, привело к автоматическому закрытию файла.RAN
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 10000 Then Exit Sub Dim rng As Range Set rng = Range("Таблица1[Столбец4]") If rng Is Nothing Then Exit Sub
If Not Intersect(Target, [c1]) Is Nothing And Target.Count = 1 Then Dim arr, li&, lmp# .Undo: lmp = [c1]: .Undo arr = rng.Value For li = 1 To UBound(arr) If Not IsEmpty(arr(li, 1)) And IsNumeric(arr(li, 1)) Then arr(li, 1) = arr(li, 1) / (1 + lmp) * (1 + [c1]) Next li rng.Value = arr End If
If Not Intersect(Target, rng) Is Nothing Then If Not IsEmpty(Target) Then Target.Value = Evaluate(Target.Address & "*" & Replace(CStr(1 + [c1]), ",", ".")) End If
.Calculation = xlCalculationAutomatic .ScreenUpdating = True: .EnableEvents = True End With
End Sub
[/vba]
если не сильно заморачиваться то вот:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 10000 Then Exit Sub Dim rng As Range Set rng = Range("Таблица1[Столбец4]") If rng Is Nothing Then Exit Sub
If Not Intersect(Target, [c1]) Is Nothing And Target.Count = 1 Then Dim arr, li&, lmp# .Undo: lmp = [c1]: .Undo arr = rng.Value For li = 1 To UBound(arr) If Not IsEmpty(arr(li, 1)) And IsNumeric(arr(li, 1)) Then arr(li, 1) = arr(li, 1) / (1 + lmp) * (1 + [c1]) Next li rng.Value = arr End If
If Not Intersect(Target, rng) Is Nothing Then If Not IsEmpty(Target) Then Target.Value = Evaluate(Target.Address & "*" & Replace(CStr(1 + [c1]), ",", ".")) End If
.Calculation = xlCalculationAutomatic .ScreenUpdating = True: .EnableEvents = True End With