我正在建立一個與 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。
希望這可以幫助!