2013-07-31 5 views
2

여기 내 질문 : 나는 메인 폼 내부에 하위 폼이 있습니다. 기본 폼에는 고객 번호가 들어 있고 하위 폼에는 해당 고객의 주문이 들어 있습니다. 따라서 한 고객이 여러 주문을 할 수 있습니다. 나는 그 고객을 위해 다음 순서로 이동했을 때 buttom을 만들고 싶다. 나는 아무 문제가 코드와 함께이 일을하지가 : 그 고객의 마지막 순서에 도착하면 나는 문제가서브 폼, VBA 액세스 2010의 레코드를 통해 루프하는 방법

Private Sub next_comp_Click() 
[Forms]![Customer]![Order Subform].SetFocus 
DoCmd.GoToRecord , , acNext 
    end sub 

입니다. 첫 번째 순서로 돌아가고 싶습니다. 이렇게하려면이 코드를 사용 : 주석 처리 된 코드와 같이

Private sub next_comp_click() 
[Forms]![Customer]![Compressor Subform].SetFocus 
Dim dbcustomer As Database 
Dim rstorder As Recordset 

Set dbcustomer = CurrentDb 
Set rstorder= dbcustomer.OpenRecordset("orders", dbOpenSnapshot) 
    With rstEmployees 
    If .AbsolutePosition = - 1 Then 
    MsgBox (.RecordCount) 
    'DoCmd.GoToRecord , , acFirst 
    Else 
    DoCmd.GoToRecord , , acNext 
    End If 
    End With 
end sub 

내가 오전 어떤 기록을 내기 위해 디버그의 종류 MsgBox 함수를 사용하는을 (궁극적으로 내가 다시 첫 번째 레코드로 루프를 원하는),하지만 어떤 이유로, 그것은 내가 첫 번째 레코드에 있다는 것을 알려줍니다. 즉, RecordCount가 1이라고합니다. 즉, 내가 작업중인 레코드의 대부분이 여러 개의 주문을 가지고 있기 때문에 이렇게되지 않아야합니다. 조건을 .AbsolutePosition = 3과 같은 것으로 변경하면 마지막 또는 빈 레코드에 도달 할 때까지 레코드가 다음 레코드로 이동하고 거기에서 다음을 클릭하면 런타임 오류 '2105'가 표시됩니다. 지정한 레코드로 이동할 수 없습니다.

문제는 .AbsolutePositon 속성이 올바른 양식이나 테이블을 찾지 못한다고 생각합니다. 그러나 모든 대답은 크게 감사 할 것입니다.

미리 감사드립니다.

+0

코드는 rstorder가 아니라 rstEmployees를 나타냅니다. 그러나 실제 * 코드를 게시해야합니다. –

답변

2

양식이 한정되어있는 경우에도 레코드 세트 항목이 필요하지 않습니다. 버튼에 다음 코드를 사용하십시오.

Private sub next_comp_click() 
    [Forms]![Customer]![Order Subform].SetFocus 
    If [Forms]![Customer]![Order Subform].Form.CurrentRecord >= [Forms]![Customer]![Order Subform].Form.Recordset.RecordCount Then 
     DoCmd.GoToRecord , , acFirst 
    Else 
     DoCmd.GoToRecord , , acNext 
    End If 
End sub 

코드를 정확하게 작성하기 위해 액세스 데이터베이스를 작성하여 복제했습니다. 이 복사하여 붙여 넣을 수 있어야하며 작동 할 것입니다.

+0

@ ObieMD5에 관심이 없으므로'[Forms]! [Customer]! [Order Subform] .Form.NewRecord'를 사용하여 마지막 행에 도달했는지 확인할 수 있습니다. 단, 하위 양식에 새 레코드/행이있는 경우에만 확인할 수 있습니다. –

+0

@AndyG 예. [Forms]! [Customer]! [Order Subform] .Form.NewRecord = True'를 사용할 수 있습니다. 그러나 질문은 마지막 레코드에서 곧바로 첫 번째 레코드로 이동하기를 원한다고 말했습니다. 귀하의 방법은 새로운 빈 레코드를 표시하지만 2105 오류는 피할 수 있습니다. – ObieMD5

+0

'NewRecord'를 확인하기 전에 다음 레코드로 이동 한 다음 첫 번째 레코드로 이동할 수 있습니다. 그러나 나는 그것을 관심 밖에서 만 언급했다. –

2

이것은 내가 마지막 레코드를 치고 나서 첫 번째 레코드로 되돌아가는 작업입니다. VBA에 넣으십시오. 이전 버튼을 사용하는 경우 반대 방향으로하십시오.

If Me.CurrentRecord = Me.Recordset.RecordCount Then 
     DoCmd.GoToRecord , , acFirst 
    Else 
     DoCmd.GoToRecord , , acNext 
    End If 
관련 문제