셀 클릭으로 양식 표시 후 CommandButton을 눌러 다음 ActiveCell로 전달

셀 클릭으로 양식 표시 후 CommandButton을 눌러 다음 ActiveCell로 전달

저는 우리 직원들이 현장에서 작성할 수 있도록 Excel에서 '태블릿' PC에 사용할 입력 양식을 만들고 있습니다. 드롭다운 메뉴 등과 같은 입력이 매우 까다롭기 때문에 큰 Pass/Fail 명령 버튼이 있는 기본 입력 양식을 사용하고 싶습니다. 개별 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과 관련된 정보를 호출하여 양식의 다음 코드를 사용하여 항목 번호, 설명 및 설명을 채웁니다.

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

이는 사용자가 설명(해당하는 경우)을 입력한 다음 "통과", "실패", "통과 및 계속" 및 "실패 및 계속" 버튼 4개 중 하나를 클릭하는 것입니다.

"통과" 또는 "실패"를 클릭하면 양식의 코드가 주석 상자의 텍스트를 인접한 셀로 반환하고(오프셋 사용) 활성 셀에 각각 "P" 또는 "F"를 입력한 다음 닫습니다. 문제 없이 사용자 양식을 작성하십시오(양식에서 다음 코드 사용).

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

내가 가진 문제는 사용자가 "Pass & Continue" 또는 "Fail & Continue"를 클릭하기를 원할 때입니다. 여기서 위의 내용은 발생하지만 활성 셀은 한 셀 아래로 이동하여 특정 새 양식을 엽니다. 해당 행에 대해.

현재 "Pass & Continue"를 위해 FORM에서 실행하는 코드는 다음과 같습니다. 내가 가진 문제는 새 양식이 열릴 때 시트에서 새 활성 셀이 선택되어 있음을 볼 수 있지만 양식은 여전히 ​​이전 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

다른 사용자 덕분에 해결책을 찾았습니다. 셀 AI14(1로 시작)에서 플래그(1 또는 0)를 찾는 양식을 호출하는 함수에 추가 IF THEN 문을 추가했습니다.

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  

그런 다음 PASS 및 FAIL 버튼에 대해 플래그 변경을 다시 1로 추가했습니다.

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

플래그를 0으로 유지하기 위해 "계속" 버튼의 플래그 변경을 생략하여 최상위 코드가 계속되지 않습니다. 그런 다음 계속 버튼 코드에 몇 가지 추가 콘텐츠를 추가하여 새 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로 반환되도록 "계속" 코딩의 끝을 정리하면 됩니다.

도움이 되었기를 바랍니다!

관련 정보