0 / 0 / 0
Регистрация: 09.09.2022
Сообщений: 41
|
|
1 | |
Макрос на просмотр предыдущих значений в ячейках excel24.01.2023, 12:15. Показов 417. Ответов 9
Метки нет Все метки)
(
Добрый день! Моя цель: видеть комментарием к ячейке прошлый результат расчетов(только 1 предыдущий) и нынешний
Есть несколько макросов, показывающие изменения в ячейках( и результат его выполнение в картинке номер 1 во вложении), но он показывает только изменения в ячейках, которые без формул, а мне нужно чтоб расчетные изменения в формулах также учитывались, подскажите, пожалуйста, как это сделать Private Sub Worksheet_Change(ByVal Target As Range) Dim NewCellValue$, OldComment$ Dim cell As Range If Intersect(Target, Range("B3:B5")) Is Nothing Then Exit Sub For Each cell In Intersect(Target, Range("F:S")) If IsEmpty(cell) Then NewCellValue = "Ячейка очищена" Else NewCellValue = cell.Formula End If On Error Resume Next With cell OldComment = .Comment.Text & Chr(10) .Comment.Delete .AddComment .Comment.Text Text:=OldComment & Application.UserName & " " & _ Format(Now, "MM.DD.YY h:MM:ss") & " : " & NewCellValue .Comment.Shape.TextFrame.AutoSize = True .Comment.Shape.TextFrame.Characters.Font.Size = 8 End With Next cell End Sub
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
24.01.2023, 12:15 | |
Ответы с готовыми решениями:
9
Макрос для привязки значений к дате с сохранением предыдущих значений
|
0 / 0 / 0
Регистрация: 09.09.2022
Сообщений: 41
|
|
24.01.2023, 12:16 [ТС] | 2 |
макрос 2
Dim xRg As Range Dim xChangeRg As Range Dim xDependRg As Range Dim xDic As New Dictionary Private Sub Worksheet_Change(ByVal Target As Range) Dim I As Long Dim xCell As Range Dim xHeader As String Dim xCommText As String On Error Resume Next Application.ScreenUpdating = False Application.EnableEvents = False xHeader = "Previous value :" For I = 0 To UBound(xDic.Keys) Set xCell = Range(xDic.Keys(I)) If Not xCell.Comment Is Nothing Then xCell.Comment.Delete With xCell .AddComment .Comment.Visible = False .Comment.Text xHeader & vbCrLf & xDic.Items(I) End With Next Application.EnableEvents = True Application.ScreenUpdating = True End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim I, J As Long Dim xRgArea As Range On Error GoTo Label1 If Target.Count > 1 Then Exit Sub Application.EnableEvents = False Set xDependRg = Target.Dependents If xDependRg Is Nothing Then GoTo Label1 If Not xDependRg Is Nothing Then Set xDependRg = Intersect(xDependRg, Range("C:C")) End If Label1: Set xRg = Intersect(Target, Range("C:C")) If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then Set xChangeRg = Union(xRg, xDependRg) ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then Set xChangeRg = xDependRg ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then Set xChangeRg = xRg Else Application.EnableEvents = True Exit Sub End If xDic.RemoveAll For I = 1 To xChangeRg.Areas.Count Set xRgArea = xChangeRg.Areas(I) For J = 1 To xRgArea.Count xDic.Add xRgArea(J).Address, xRgArea(J).Text Next Next Set xChangeRg = Nothing Set xRg = Nothing Set xDependRg = Nothing Application.EnableEvents = True End Sub
0
|
ᴁ®
![]() |
|
24.01.2023, 21:07 | 3 |
Изменяете формулы?
Добавлено через 6 минут Не правильно оформленный вопрос вызывает желание не читать его. Не грамотная постановка задачи не предполагает грамотных ответов. Проигнорированные предыдущие советы в предыдущих вопросах от вас обнуляют вероятность желающих помочь.
0
|
0 / 0 / 0
Регистрация: 09.09.2022
Сообщений: 41
|
|
25.01.2023, 08:59 [ТС] | 4 |
АЕ, Доброе утро, нет, данные будут изменяться только на листе "исходные данные", на всех других листах(в примере 1 лист, на деле несколько однотипных листов, форма 1 в 1) формулы будут пересчитываться в зависимости от значений которые вводим в исходных данных
Добавлено через 7 минут АЕ, Т.е изменили в исходных данных скорость ветра, на всех остальных листах выработка энергии изменилась(ну и остальные данные), наводим на ячейку и в комментариях видим прошлые результаты. Хотелось бы это видеть так.. Добавлено через 2 часа 22 минуты АЕ, На листе чистая выработка почти все ячейки имеют либо ссылку связями, либо формулу(которая пересчитывается каждый раз при изменении исходных данных(скорость ветра и часы простоя) Вот нужно видеть именно пересчет этих формул, т.е к примеру, была скорость ветра в ВЭС 1 = 6.5 а Wпрогноз = 12810, изменили скорость ветра на 10, Wпрогноз стал = 43372(формула сама все посчитала, я меняю только значения скорости ветра и часов простоя в исходных данных, больше абсолютно ничего не трогаю) Хочется увидеть: Навели курсор на ячейку Wпрогноз и показывается комментарием "прошлое значение: 12810" В этот раз все очень подробно написал, извиняюсь если изначально плохо объяснил P.S рассматриваю все возможные варианты, если намного проще реализовать это в другом виде Для скорости работы можно сделать только для ячеек Wпрогноз, КИУМ, скорость ветра, остальные не нужны "Проигнорированные предыдущие советы в предыдущих вопросах от вас обнуляют вероятность желающих помочь." Извиняюсь, но не очень понимаю о чем речь, вы имеете ввиду что нужно помечать то, что я хочу увидеть в самом файле?
0
|
100 / 88 / 16
Регистрация: 08.02.2017
Сообщений: 481
|
|
27.01.2023, 02:47 | 5 |
Хотел предложить вариант с отслеживанием значений с помощью vba-udf, даже макрчик написал, но выявилась неполадка, оказывается vba-шные udf не реагируют на изменения в сложных формулах, или может быть связано с плавающими запятыми х.з.
0
|
1158 / 636 / 228
Регистрация: 22.12.2015
Сообщений: 1,966
|
|
27.01.2023, 12:02 | 7 |
Любопытно, если аргументы перечислены в явном виде и меняются - вроде бы Эксель должен запускать пересчет, разве нет?
А если отобразить на ячейке с подозрительной формулой (в смысле - со сложной) зависимые ячейки, стрелочка к udf отображается?
0
|
100 / 88 / 16
Регистрация: 08.02.2017
Сообщений: 481
|
|
27.01.2023, 12:35 | 8 |
Решилось костылем - добавлением какой-нибудь не нагружной встроенной функции диапазона, (в римере "СЧЁТ()") в качестве аргумента UDF и она начинает "подскакивать по щелчку". Но при этом выявился еще один не благотворный нюанс - наличие волатильных функций в цепочке формул, в данном случае это значит, что udf-ки будут "подскакивать" "по любому тыку", - как минимум не полезно. Упомянутый макрчик, не один если быть точнее, можно доработать до надстройки.
Для того чтобы начать слежение за диапазоном, нужно поместить в заголовок (или куда-либо еще) функцию ChangeControl (с названием подкачал, можете придумать получше), первым аргументом установить диапазон, вторым (необязательно) - то, что должно выводиться на месте функции, третий аргумент не обязательный нужен если не срабатывает, 4 аргумент - идентификатор, проставляется автоматически макросом
0
|
100 / 88 / 16
Регистрация: 08.02.2017
Сообщений: 481
|
|
27.01.2023, 12:50 | 9 |
Раньше замеал, что vba-udf не "видит" некоторых изменеий, хотя если поместить такую формулу в качестве аргумента UDF то она срабатывает как полагается, однакож, не изящно.. К слову у UDF еще есть ряд ограничений и глюков, за что видимо их не особо жалуют.
0
|
100 / 88 / 16
Регистрация: 08.02.2017
Сообщений: 481
|
|
28.01.2023, 19:08 | 10 |
0
|
28.01.2023, 19:08 | |
Помогаю со студенческими работами здесь
10
Макрос на изменение значений в ячейках при изменении значения в ячейке Увеличение значений в ячейках Excel
Макрос всевозможных перестановок значений ячеек /Excel
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |