1

Я создаю форму ввода для использования с «планшетным» ПК в Excel, чтобы наши ребята могли заполнить ее в поле. Поскольку вводы, такие как выпадающие меню и т. П., Довольно трудоемки, я хочу использовать базовую форму ввода с большими кнопками Pass/Fail Command. Вместо того, чтобы использовать отдельные CommandBox для вызова формы, я решил использовать следующий код (внутри объекта / листа) для вызова формы при выборе определенных ячеек:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Selection.Count = 2 Then
        If Not Intersect(Target, Me.Range("W16:W46,W74:W143")) Is Nothing Then
            PFInputForm.Show
        End If
    End If
End Sub

Макет формы ввода

Форма ввода вызывает информацию, относящуюся к ActiveCell, для заполнения Item #, Description & Comments, используя следующий код в FORM.

Private Sub UserForm_Initialize()
    PFInputForm.INPUTCOMMENT.Text = CStr(ActiveCell.Offset(0, 1).Value)
    PFInputForm.ITEMNO = "Item " & ActiveCell.Offset(0, -2)
    PFInputForm.ITEMDESCR = ActiveCell.Offset(0, -1)
End Sub

Предполагается, что пользователь введет комментарий (если применимо), а затем нажмите одну из четырех кнопок "Пропустить", "Неудачно", "Пропустить и продолжить" и "Неудачно и продолжить".

Если они нажимают "Pass" или "Fail", у меня есть код в форме, который возвращает текст в поле "Комментарий" в соседнюю ячейку (с помощью смещения), введите "P" или "F" соответственно в активной ячейке и закройте Форма пользователя без проблем (используя следующий код в ФОРМЕ).

Private Sub PASSButton_Click()
    PFInputForm.Hide
    ActiveCell = "P"
    ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
End Sub

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

Код, который я сейчас запускаю из FORM для «Pass & Continue», приведен ниже. У меня проблема в том, что когда открывается новая форма, я вижу, что новая активная ячейка выбрана на листе, но форма все еще вызывает информацию из предыдущего ActiveCell.

Private Sub PCONTButton_Click()
    PFInputForm.Hide
    ActiveCell = "P"
    ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
    ActiveCell.Offset(1, 0).Select
End Sub  

Я безуспешно пробовал несколько вариантов, в том числе скрытие пользовательской формы (как в коде FORM, так и в коде Sheet), но после нескольких часов траления на этом (и других) форумах, я чувствую, что теперь просто закалываю темно!

1 ответ1

0

Я нашел решение благодаря другому пользователю. Я добавил дополнительный оператор IF THEN в функцию, вызывающую форму, которая ищет флаг (1 или 0) в ячейке AI14 (которая начинается с 1):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("AI14") Then
        If Selection.Count = 2 Then
            If Not Intersect(Target, Me.Range("W16:W46,W74:W143")) Is Nothing Then
                Range("AI14") = 0
                PFInputForm.Show
            End If
        End If
    End If
End Sub  

Затем я добавил изменение флага обратно в 1 для кнопок PASS и FAIL:

Private Sub PASSButton_Click()
    Range("AI14") = 1
    ActiveCell = "P"
    ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
    PFInputForm.Hide
End Sub

Я опускаю изменение флага на кнопках "Продолжить", чтобы флаг оставался нулевым, чтобы верхний код не продолжался. Затем я добавил дополнительный код в код кнопки "Продолжить", чтобы он извлекал связанную информацию из нового ActiveCell:

Private Sub PCONTButton_Click()
    ActiveCell = "P"
    ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
    ActiveCell.Offset(1, 0).Select

    PFInputForm.INPUTCOMMENT.Text = CStr(ActiveCell.Offset(0, 1).Value)
    PFInputForm.ITEMNO = "Item " & ActiveCell.Offset(0, -2)
    PFInputForm.ITEMDESCR = ActiveCell.Offset(0, -1)
End Sub

Этот код использует тот же источник информации, что и код для инициализации формы (см. Оригинальный пост)

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

Надеюсь это поможет!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .