2013-07-05 4 views
0

필터가있는 폼을 엽니 다. 이 양식을 사용하여 새 레코드를 만들 때 필드가 필터와 동일한 기본값을 갖길 원합니다. (그러면 새 레코드가 현재 필터 결과의 일부가됩니다). 폼을 열 때 tempvar에 필터 값을 저장합니다.필드 기본값을 필터와 동일하게 설정하십시오.

어떻게하면 간단하게 처리 할 수 ​​있습니까?

이 질문에서 현재의 필터를 얻을 수있는 두 후자의 방법을 시도 : Access 2003 VBA Get Active filter?

나는 전자를 이해하지 못했다.

Visual Basic을 프로그래밍하지 않았고 중요한 수준의 액세스를 사용하지 않았습니다. 그래서 나는 꽤 상세한 설명이 필요할지도 모른다.

고마워요.

+0

현재 매크로를 사용하여 다른 테이블의 필드 중 하나를 클릭하여 양식을 엽니 다. 매크로는 방금 누른 필드의 값으로 필터링하여 다른 테이블과 관련된 양식을 엽니 다. 내가 누른 필드의 값 i는 [tempvar] (http://msdn.microsoft.com/en-us/library/office/bb257080%28v=office.12%29.aspx) 개체에 저장됩니다. 이게 더 명확했으면 좋겠어요 – snobjorns

답변

0

아쉽게도 Access에는 이러한 기능이 없습니다. 그리고 이것을 구현하기 위해서는 VBA를 배워야합니다.

필자는 필터를 분석하기가 어려울 것이라고 생각합니다. 제 생각에는 각 필드에 대한 필터 및 오류 값을 설정하는 것이 더 쉬울 것입니다. 양식을 여는 함수와 값을 설정하기위한 일부 공용 양식 메소드가 필요합니다.

Dim m_stFiler as String 

Public Sub SetControlFilter(ByVal stCtrl As String, ByVal stExp As String, ByVal stValue as String) 
    Dim ctl As Control 

    '-- set default value 
    set ctl = Me("stCtrl") 

    ctl.DefaultValue = "=""" & stValue & """" 

    '-- build filter 
    If m_stFiler <> "" Then m_stFiler = m_stFiler & " AND " 
    m_stFiler = m_stFiler & ctl.ControlSource & " " & stExp & " "" & stValue & "" " 

End Sub 

Public Sub ApplyFilter() 
    Me.Filter = m_stFiler 
    Me.FilterOn = True 
End Sub 
+0

답장을 보내 주셔서 감사합니다. 내가 VBA를 프로그래밍 한 적이 없기 때문에 코드가하는 것을 완전히 이해할 수는 없습니다. 그러나 이것이 작동하면 구현해야 할 것이 하나 더 있습니다. 즉, 첫 번째 양식에서 클릭하는 필드의 값에 해당하는 의미로 적용되는 필터를 동적으로 적용하고 싶습니다. – snobjorns

+0

빠른 질문 : 새로 생성 된 SomeForm Module 또는 새로운 SomeForm 클래스 Module에서 두 번째 Codeblock을 form_Someform 클래스에 붙여야합니까? – snobjorns

+0

Ooops, 나는 실수를하였습니다 : m_stFiler = ctl.ControlSource. m_stFiler = m_stFiler & ctl.ControlSource이어야합니다 ... – Sergey

0

Sergeys 대답 바른 길에 나를 넣어 :

여는 형태의 기능을 같이 할 수처럼

Dim frm as Form_SomeForm 

DoCmd.OpenForm "SomeForm", , , , , acHiden 

Set frm = Forms("SomeForm") 

frm.SetControlFilter("UserName", "=", "Foo") 
frm.SetControlFilter("Age", "=", "123") 
... 

frm.ApplyFilter() 

frm.Visible = True 

양식 모듈 "SomeForm"찾아보실 수 있습니다.

나는 tweeks를해야만했다.

그것은 단지 하나의 필드에 근무하고 나는 methodsas이 전화를했다 :

Dim stCon As String 
stCon = stCtrl 
'-- set default value 
Set ctl = Me(stCon) 
: 나는이 같은 새로운 내부 변수에 stCtrl을 저장했다 몇 가지 이유를 들어

Call frm.SetControlFilter("Age", "=", "123") 

고마워요 많은로

+0

실수를했습니다. 이미 고쳤습니다. 위 참조. – Sergey

관련 문제