Показать форму из клика ячейки, затем CommandButton для перехода к следующей ActiveCell
Я создаю форму ввода для использования с "планшетным" ПК в 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
Предполагается, что пользователь введет комментарий (если применимо), а затем нажмите одну из четырех кнопок "Пропустить", "Неудачно", "Пропустить и продолжить" и "Неудачно и продолжить".
If they click "Pass" or "Fail", I have code in the Form return the text in the Comment box to the adjacent cell (using Offset), enter "P" or "F" respectively in the Active Cell, and close the user form with no problems (using the following code in the FORM).
Private Sub PASSButton_Click()
PFInputForm.Hide
ActiveCell = "P"
ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
End Sub
The problem I have is when I want the user to click either "Pass & Continue" or "Fail & Continue", where the above is meant to happen, but the Active Cell then moves down one cell, and opens up a new Form specific for that row.
The code I currently run from the FORM for the "Pass & Continue" is below. The problem I have is that when the new Form opens, I can see the new active cell is selected on the Sheet, but the form is still calling on the information from the previous ActiveCell.
Private Sub PCONTButton_Click()
PFInputForm.Hide
ActiveCell = "P"
ActiveCell.Offset(0, 1) = PFInputForm.INPUTCOMMENT
ActiveCell.Offset(1, 0).Select
End Sub
I've unsuccessfully tried a few variants, including hiding the user form (both in the FORM code and the Sheet code), but after a few hours of trawling this (and other) forums, I feel I'm now just stabbing in the dark!
1 ответ
Я нашел решение благодаря другому пользователю. Я добавил дополнительный оператор 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
Этот код использует тот же источник информации, что и код для инициализации формы (см. Оригинальный пост)
Мне просто нужно привести в порядок конец кодирования "continue", чтобы флаг возвращался к 1, как только был достигнут последний элемент в списке.
Надеюсь это поможет!