Возможность клавиатуры Excel изменить значение в отображаемой линии диапазона динамического графика - PullRequest
0 голосов
/ 06 июля 2019

Я планирую построить линию графика, состоящую из 20 значений, настроенных как динамический диапазон графика. Затем я могу вручную перейти на лист и обновить эти значения по одному, и диаграмма изменит свое отображение.

Но вместо того, чтобы вручную изменять значения листа, я хочу иметь возможность; 1. Переместите курсор в одну из отображаемых точек на линии [с помощью мыши?]. 2. С помощью клавиш со стрелками вверх / вниз измените значение точки [на значение оси y, куда перемещается точка]. Инкрементное значение, при котором точка перемещается вверх / вниз с помощью клавиш со стрелками, может быть настраиваемым значением на листе. 3. При изменении значения точки линия должна быть заново построена с использованием последних 20 обновленных значений в диапазоне.

Спасибо.

Don

Пока ничего не пробовал. Просто идея, которую я хочу использовать в возможных приложениях.

Нет кода для этого изменения.

Сводка проблемы детализирует результаты.

P.S. Поскольку я получил -1 голос, я подумал, что должен добавить больше о том, для чего это будет использоваться в реальной жизни.

У меня дегенерация желтого пятна, но она замедлилась от ухудшения много лет назад, и я получаю регулярные уколы одним плохим глазом. На протяжении многих лет пациенты использовали оригинальную сетку Амслера для проверки на предмет ухудшения состояния, чтобы они могли быстро увидеть свой Eye Doc, чтобы сделать укол, прежде чем он ухудшится. В последнее время были созданы машины, которые могут проверять ухудшение состояния и сообщать об этом пользователю и / или его врачу. Однако эти машины стоят дорого. И результаты сетки Амслера очень субъективны.

Моя идея состоит в том, чтобы разработать лист Excel с диаграммой, чтобы заменить сетку Амслера одной прямой линией, которая может быть показана под любым углом через центральную точку, и позволить любому, у кого есть Excel, проверить свои глаза с помощью этой динамической замены. Сетка Амслера имеет точку в центре и ряд горизонтальных и вертикальных линий сетки. Вы закрываете один глаз, а другим смотрите на центрированную точку и затем субъективно определяете, видите ли вы линии сетки идеально, выглядят ли они искаженными.

То, что я хочу сделать, - это иметь диаграмму, на которой пользователь может выборочно определять любые искаженные участки линии, нажимать на искаженное место на линии, а затем «перемещать» это место, чтобы выровнять его с представлением пользователей о остальная часть линии. После того, как пользователь «выпрямил» строку, он отправляет ее. Затем логика инвертирует исправленную линию [которая в действительности обратно искажается движениями точек на линии пользователя], а затем эта строка отправляется доктору, участвующему по электронной почте. Затем документ может определить, насколько серьезным является искажение, сравнивая его с предыдущими линиями, отправленными по электронной почте от того же пользователя, и сравнивая с идеальной прямой линией, с которой пользователь начал, и можно назначить встречу для посещения офиса.

Я могу справиться с квадратичной логикой наилучшего соответствия для отображения линии через точки, начиная с линейной, а затем подгоняя к искаженным пользователем результатам. Мне просто нужна помощь по первоначально поставленным вопросам.

1 Ответ

1 голос
/ 06 июля 2019

Итак, вот мое мнение об этом (может быть, есть более элегантные способы), оно слишком упрощено до того, что вы хотите, я думаю, и не на все ваши вопросы будут даны ответы, но, возможно, вам удастся реализовать некоторые из них.

1) Создайте диаграмму на отдельном листе, мой пример данных на линейном графике:

enter image description here

2) Присвойте код Private Sub Chart_Activate и Private Sub Chart_Deactivate, например:

Private Sub Chart_Activate()

Application.OnKey "{UP}", "GoUp"
Application.OnKey "{DOWN}", "GoDown"

End Sub

Private Sub Chart_Deactivate()

Application.OnKey "{UP}", ""
Application.OnKey "{DOWN}", ""

End Sub

3) OnKey активирует два модуля, называемых GoUp или GoDown, я написал их следующим образом (возможно, это можно сделать лучше)

Sub GoUp()

If TypeName(Selection) = "Point" Then
    For Each pt In ActiveChart.SeriesCollection(1).Points
        x = x + 1
        If pt.Name = Selection.Name Then
            With ThisWorkbook.Sheets("Sheet1")
                .Range("A" & x).Value = .Range("A" & x).Value + 1
            End With
            Exit For
        End If
    Next pt
End If

End Sub

Sub GoDown()

If TypeName(Selection) = "Point" Then
    For Each pt In ActiveChart.SeriesCollection(1).Points
        x = x + 1
        If pt.Name = Selection.Name Then
            With ThisWorkbook.Sheets("Sheet1")
                .Cells(x, 1) = .Cells(x, 1) - 1
            End With
            Exit For
        End If
    Next pt
End If

End Sub

При необходимости измените +1 и -1 на назначенную переменную.

4) Результат при нажатии стрелки вниз или вверх при выборе точки:

enter image description here

...