在我的應用程序中,用戶正在從要編輯的列表框中選擇記錄。然而,在他們能夠編輯之前,還有一個額外的查詢來確保他們想要更改的信息是正確的。以下是流程:在Access VBA中運行DoCmd.Requery時取消選擇列表框中的記錄
- 用戶輸入一個Item_Number,然後單擊一個按鈕來查詢包含該Item_Number的所有位置的數據庫。這些填充到列表框中。
- 用戶從他/她希望編輯
- 用戶列表框的位置(一個或多個)輸入用於所選擇的項的新Last_Cost和/或新VENDOR_ID並點擊確認編輯
- 在VBA中,有對另一個數據庫的查詢,以確保新VENDOR_ID有效
- 流程繼續
的問題是,當重新查詢
DoCmd.Requery (VendorNumbers)
VBA代碼
執行時,它將取消選擇列表框中的所有選定位置。我已經能夠將問題縮小到VBA代碼的確切部分。
我想知道是否有辦法確保所選記錄保持選定狀態,或者如果有方法可以存儲哪些行被選中,以便在重新運行代碼後可以再次引用它們?
完整的代碼。這看起來可能有點混亂,因爲我沒有用「我」來記錄任何內容。
Private Sub EditInLocationsButton_Click()
EditVendorIDFixed = Null
EditVendorIDFixed = " " & EditVendorIDInput
DoCmd.Requery (VendorNumbers)
If EditVendorIDFixed = " " Or DCount("*", "VendorNumbers") > 0 Then
EditResponse = MsgBox("Are you sure you want to edit the selected items?", vbYesNo, "Edit Selected Items?")
If EditResponse = vbYes Then
'EditItemNumberResultsList.RowSource = ""
Dim i As Integer
For i = 0 To EditItemNumberResultsList.ListCount - 1
If EditItemNumberResultsList.Selected(i) Then
LastCost = EditItemNumberResultsList.Column(4, i)
EditID = EditItemNumberResultsList.Column(5, i)
VendorID = EditItemNumberResultsList.Column(6, i)
'MsgBox for verification purposes
MsgBox (LastCost & "-" & EditID & "-" & VendorID)
If EditLastCostInput = Null Then
LastCostforEditQuery = LastCost
Else
LastCostforEditQuery = EditLastCostInput
End If
If EditVendorIDInput = Null Then
VendorIDforEditQuery = VendorID
Else
VendorIDforEditQuery = EditVendorIDFixed
End If
End If
txtEditID = EditID
With DoCmd
.SetWarnings False
.OpenQuery "EditIminvlocRecords"
.SetWarnings True
End With
Next i
MsgBox ("The selected plants have been updated.")
End If
Else
MsgBox ("Error: The requested Vendor ID does not exist.")
End If
End Sub
下面是VendorNumbers查詢:
SELECT dbo_apvenfil_sql.vend_no
FROM dbo_apvenfil_sql
WHERE (((dbo_apvenfil_sql.vend_no)=[Forms]![EditItemsInExistingPlants]![EditVendorIDFixed]))
ORDER BY dbo_apvenfil_sql.vend_no;
同樣,這只是爲了驗證他們VENDOR_ID輸入是有效的,即有現有行。
你碰巧有更多的代碼來顯示發生了什麼?我對你將需要做的事情的想法是在查詢之前創建一個「書籤」系統,保存列表框中的值,並在查詢之後將其設置回該值。但擔心的是它會重新觸發代碼導致整個週期重複。 – Newd 2015-01-15 16:21:29
@Newd當然,我將使用我正在使用的整個VBA代碼進行編輯。 – GothamHunter 2015-01-15 16:30:14
@HansUp我需要驗證他們放入的Vendor_ID是否有效,因此該行使用它們輸入的Vendor_ID對單獨的數據庫運行查詢以查看它是否返回任何記錄。如果是,它是有效的,如果沒有,那麼它是無效的。也許有一個更簡單的方法來實現這一目標? – GothamHunter 2015-01-15 16:38:00