Запуск макроса с помощью UserForm ScrollBar (fmScrollBarsVertical) Изменение свойства - PullRequest
0 голосов
/ 07 ноября 2019

Мне нужна помощь в попытке использовать полосу прокрутки UserForm (fmScrollBarsVertical) для вызова функции записи времени в создаваемом мной макросе и записи времени взаимодействия в XLS. Я создал фиктивный файл, который я прикреплю, чтобы вы могли увидеть общие функциональные возможности программы и увидеть соответствующую пользовательскую форму (названную «TargetForm»). Чтобы выполнить пример программы, макрос должен быть запущен из формы 'MainWindow' .

https://drive.google.com/file/d/1OV5UlZNx8YjRTKYmZ-a_wLG5Qk3jcmgZ/view?usp=sharing

В программе я использую mouseDown / mouseUp для отслеживаниязапись времени для взаимодействия пользователя с интерфейсом и необходимость чего-то подобного для аспекта прокрутки. Если вы проверите мой код с помощью командных кнопок в качестве ссылки, вы увидите, как я сейчас пишу эти времена в соответствующий лист XLS.

Private Sub level1button_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    RecordTime (Timer())
End Sub

Private Sub level1button_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    RecordTimeEnd (Timer())
End Sub

Private Sub level1button_Click()
    Call beep
    TrialNum = TrialNum + 1
    Record ("Main-Level1")
    SetTrial (TrialNum)
    Me.Hide
    Level1.Show
End Sub

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

Private Sub TargetForm_Scroll(ByVal ActionX As MSForms.fmScrollAction, ByVal ActionY As MSForms.fmScrollAction, ByVal RequestDx As Single, ByVal RequestDy As Single, ByVal ActualDx As MSForms.ReturnSingle, ByVal ActualDy As MSForms.ReturnSingle)

    If ActionY = fmScrollActionControlRequest Then
        Record ("TargetForm-Scroll")
        MainWindow.TrialNum = MainWindow.TrialNum + 1
        MainWindow.SetTrial (MainWindow.TrialNum)
        MainWindow.TargetFormscroll = 0
        RecordTimeEnd (Timer())
    End If
End Sub

Я также пытался использовать fmScrollActionPropertyChange для начальной точки безрезультатно, fmScrollActionFocusRequest в качестве функции «таймер остановки» и функции case, но я продолжаю работать до отказа. Моя последняя попытка была попытка использовать scroll_change (), опять же, что привело к сбою.

Private Sub TargetForm_Change()
    If MainWindow.TargetFormscroll = 0 Then
        RecordTime (Timer())
        MainWindow.TargetFormscroll = MainWindow.TargetFormscroll + 1
    End If
End Sub

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

Для ясности запрошенный сервис должен помочь диагностировать / исправить мое невежество и помочь в реализации кода для отслеживать продолжительность взаимодействия пользователя с полосой прокрутки UserForm . Для этого не нужно использовать значения ActiveX или какой-либо другой вариант моих попыток, просто завершите задачу записи времени, записанного на листе.

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

1 Ответ

0 голосов
/ 08 ноября 2019

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

Private blnScroll As Boolean
Private dblTimer As Double

Private Sub Frame1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If blnScroll Then
        Debug.Print X, Y, Button, "Time : " & Timer - dblTimer
        blnScroll = False
    End If
End Sub

Private Sub UserForm_Scroll(ByVal ActionX As MSForms.fmScrollAction, _
                                ByVal ActionY As MSForms.fmScrollAction, _
                                ByVal RequestDx As Single, _
                                ByVal RequestDy As Single, _
                                ByVal ActualDx As MSForms.ReturnSingle, _
                                ByVal ActualDy As MSForms.ReturnSingle)

        If Not blnScroll Then
            blnScroll = True
            dblTimer = Timer
        End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...