잘하면 도와 줄 수 있습니다. 네비게이션이 목록 상자와 직접 만든 다음 및 이전 단추 세트와 관련된 쿼리에 바인딩 된 양식이 있습니다. 로드시 목록 상자에서 첫 번째 행을 선택하고 포커스가 자동으로 동일한 첫 번째 행에 설정됩니다. 따라서 첫 번째 행을 선택하면 레코드의 고유 ID를 가져 와서 레코드 세트를 복제하여 양식에 표시 할 수 있습니다. 텍스트 상자 및 드롭 다운을 통해 양식의 레코드를 업데이트 할 때 레코드가 특정 조건을 충족하면 테이블에서 삭제되고 다른 테이블에 추가됩니다. 그래서, 레코드를 삭제 한 후 목록 상자에 동일한 행을 선택하려고 시도합니다. 다시 쿼리 한 후에 바로 다음 레코드를 보여 주어야합니다. 문제는 listindex가 변경되고 직접 실행 창에서 끌어 올리면 이전에 클릭 한 행의 인덱스 번호가 점선으로 표시되지만 실제 선택한 행과 검게 된 행은 표시되지 않습니다. listbox.setfocus 명령을 통해이 문제가 발생했지만 setfocuses를 모두 꺼내어 도움이되었습니다. 그러나 이제 사용자는 목록 상자가 onfocus가 아니기 때문에 마우스 휠을 사용할 수 없습니다. 또한 오른쪽의 스크롤 막대를 클릭하면 점선이 다시 나타납니다.리스트 박스 인덱스에서 ms 액세스 vba와의 문제 및 클릭시 setfocus 변경
AfterUpdate 코드는 완료되면 레코드를 이동합니다. 거기에 move_completed 프로 시저가 있지만 완료시 레코드를 아카이브 테이블로 이동하는 데 필요한 SQL을 실행하는 데만 사용됩니다. 목록 상자와 양식을 동기화 할 수없는 경우 레코드를 이동하기 위해 올바른 고유 ID를 선택하지 않는 코드로 인해 레코드가 올바르게 이동하지 않습니다.
도움이 되셨습니다. 내가 코드를 누락하는 경우 알려주세요)
Private Sub Form_Load()
With Me
'I populate the hidden text box below in order to keep a reference as data is updated and use it when we need to do requeries
.txtCurrentFile.Value = Forms!frmSelectPT.cboSelectPTFile.Value
'QRecSel is the name of the listbox which is now being populated, onload
.QRecSel.RowSource = "" & _
"SELECT P.ID, P.[Member Number], P.[Member SSN], P.[Last Name] & ', ' & P.[First Name] AS [Mbr Name], P.DOB, " & _
"P.[Member Eff Date], P.HRID, P.[Date Completed], P.[Enrollment Rep], P.[Edit Worked], P.Comments " & _
"FROM sqPTRecSource AS P " & _
"WHERE (((P.[File Name])='" & .txtCurrentFile & "'));"
End With
'Here we move to the first row and subsequently will make the form's record to the first row selected
Call MoveToFirstOnlist
End Sub
Sub MoveToFirstOnlist()
Dim rs As DAO.Recordset, strEditRcdID As String
'I will now select top row, since my listbox has no headders, then it's 0,0
Me!QRecSel.Selected(0) = True
'I noticed this line is a little redundant, since the listbox bound column is column "0" anyways, but it works for me when I pull the ID
strEditRcdID = Nz(Me.QRecSel.Column(0), 0)
Set rs = Me.Form.RecordsetClone
rs.FindFirst "[ID] = " & strEditRcdID
Me.Form.Bookmark = rs.Bookmark
'Cleanup
Set rs = Nothing
strEditRcdID = ""
End Sub
Private Sub cmdNext_Click()
With Me.QRecSel
If IsNull(Me.QRecSel.Column(0, (.ListIndex) + 1)) = False Then
Me.QRecSel.Selected((.ListIndex) + 1) = True
QRecSel_Click
Else
MsgBox "The last edit is already selected!"
End If
End With
End Sub
Private Sub cmdPrevious_Click()
Dim lngIndex As Long
With Me.QRecSel
lngIndex = .ListIndex
If lngIndex > 0 Then
.Selected(lngIndex - 1) = True
QRecSel_Click
ElseIf lngIndex = 0 Then
MsgBox "The first edit is already selected!"
End If
End With
End Sub
Private Sub QRecSel_Click()
Dim rst As DAO.Recordset, varID As Variant
RunCommand acCmdSaveRecord
varID = "'" & Me!QRecSel.Column(0) & "'"
Set rst = Form.RecordsetClone
rst.FindFirst "cstr([ID]) = " & varID
Form.Bookmark = rst.Bookmark
Set rst = Nothing
varID = ""
End Sub
Private Sub cboEditWorked_AfterUpdate()
On Error GoTo Error_Handler
Dim strCurrRecID As String, lngRow As Long, lngLastIndex As Long, strLastRowSource As String
With Me
strCurrRecID = .QRecSel.Column(0)
If .cboEditWorked.Value = "Yes" Then
If .cboEnrollmentRep.Value = "" Or IsNull(.cboEnrollmentRep) = True Then
MsgBox "Please pick 'Enrollment Rep' from list", vbCritical, "No Enrollment Rep!"
.cboEditWorked.Value = "No"
RunCommand acCmdSaveRecord
ElseIf .cboEnrollmentRep.Value <> "" Or IsNull(.cboEnrollmentRep) = False And .cboEditWorked.Value = "yes" Then
.txtDateCompleted.Value = Format(Date, "MM/DD/YYYY")
RunCommand acCmdSaveRecord
lngLastIndex = .QRecSel.ListIndex
strLastRowSource = .QRecSel.RowSource
Move_Completed .cboEnrollmentRep, .cboEditWorked, .QRecSel.Column(0), "tbl_MEI_PT_ARCHIVE", _
"tbl_MEI_PT_WORK", "ID"
.QRecSel.Requery
If .QRecSel.ListCount > 0 Then
.QRecSel.Selected(lngLastIndex) = True
QRecSel_Click
Else
If .QRecSel.ListCount > 0 Then
Call MoveToFirstOnlist
End If
End If
End If
End If
End With
Exit_Here:
strCurrRecID = "": lngRow = 0: lngLastIndex = 0
Exit Sub
Error_Handler:
Resume Exit_Here
End Sub