按一下儲存格顯示表單,然後使用 CommandButton 傳送到下一個 ActiveCell

按一下儲存格顯示表單,然後使用 CommandButton 傳送到下一個 ActiveCell

我正在建立一個與 Excel 中的「平板電腦」PC 一起使用的輸入表單,供我們的人員在現場填寫。由於下拉式選單等輸入非常繁瑣,我希望使用具有大通過/失敗命令按鈕的基本輸入表單。我選擇使用以下程式碼(在物件/工作表內)在選擇某些單元格時呼叫表單,而不是使用單獨的 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

目的是讓使用者輸入評論(如果適用),然後按一下「通過」、「失敗」、「通過並繼續」和「失敗並繼續」四個按鈕之一。

如果他們單擊“通過”或“失敗”,我會在表單中使用程式碼將註解框中的文字返回到相鄰儲存格(使用偏移量),在活動儲存格中分別輸入“P”或“ F”,然後關閉使用者表單沒有問題(在表單中使用以下程式碼)。

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

我遇到的問題是,當我希望用戶單擊“通過並繼續”或“失敗並繼續”時,上述情況應該發生,但活動單元格然後向下移動一個單元格,並打開一個特定於新表單的新表單對於該行。

我目前從“通過並繼續”表單運行的程式碼如下。我遇到的問題是,當新表單開啟時,我可以看到工作表上選擇了新的活動儲存格,但表單仍在呼叫先前的 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

感謝另一位用戶,我找到了解決方案。我為呼叫表單的函數新增了一個額外的 IF THEN 語句,該語句在儲存格 AI14(以 1 開頭)中尋找標誌(1 或 0):

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

我省略了“繼續”按鈕上的標誌更改,以將標誌保持為零,因此頂部代碼不會繼續。然後,我為「繼續」按鈕程式碼添加了一些額外的內容,以便它從新的 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。

希望這可以幫助!

相關內容