2014-10-24 2 views
0

데이터베이스에있는 다른 폼을 제어하기위한 테이블 및 폼 설정이 있습니다. 필자는 필드에서 제목을 가져 와서 내 코드에 다른 형식의 표시 유형을 변경하는 변수로 추가하는 코드를 만들고 싶습니다.다른 폼에서 VBA 가시 컨트롤 폼에 액세스

내 양식은 제어하려는 양식의 모든 개체에 모든 이름으로 설정됩니다.

LSE_FORM_ADMIN = 모든 LSE_FORM_ALL 이름이있는 테이블. 테이블에는 3 개의 키, 이름 및 연속 목록을 만들기 위해 양식에 입력하는 확인란이 있습니다. 여기

양식에 내 코드,하지만 난 점점 유지하고 런타임 424 : 개체가 필요 오류 :

Private Sub Form_Current() 
    Dim VARSET As Object 
    Dim VAR As String 
    VARSET = DLookup("TITLE", Table!LSE_FORM_ADMIN, "") 'keep getting error here 
    VAR = VARSET 
    If Me!CB = "-1" Then 
    Form_LSE_FORM_ALL!VAR.Visible = True 
    Else 
    Form_LSE_FORM_ALL!VAR.Visible = False 
    End If 
    End Sub 

사람은 제목 필드 데이터를 잡아 그것을 만들 수 있도록 저를이 코드를 해결하는 데 도움을 줄 수 있습니다 나머지 코드에 추가 할 변수는 무엇입니까?

+0

DLOOKUP의 두 번째 필드가 잘못되었습니다. 테이블 이름이나 쿼리 이름을 제공해야합니다. 따옴표를 포함하여 다음을 사용하십시오 : "LSE_FORM_ADMIN". 그래도 VARSET이 제대로 참조/사용/설정되지 않아 다시 충돌합니다. 당신은 "모든 객체의 이름을 ... 제어하는"언급하지만 코드는 모든 레코드를 반환하지 않습니다. 레코드 집합을 연 다음 모든 행을 반복해야합니다. –

+0

은 당신이 말한 것을 취하고 기록 세트를 만들려고 노력했지만, 그것이 필요한지 확실하지는 않습니다. 모든 제목은 어쨌든 하위 양식에 있으므로 포커스를 받으면 올바른 제목을 얻을 수 있습니다. –

답변

0

그것은 당신이 달성하기 위해 노력하고있다 정확하게 볼 어렵습니다,하지만 문제는 당신이 명시 적으로 폼 또는 컨트롤 유형을 사용한다 변형 변수 유형을 사용하는 줄기. 마지막 예를 사용하십시오.

RSTT.Visible = True 'getting Run-time error '424': object required

이것은 RSTT를 변형으로 선언했기 때문입니다. 라인 속성 ".Visible"당신이 볼 필요가있는 값을 가지고

Set DB = CurrentDb 
Set RS = DB.OpenRecordset("LSE_FORM_ADMIN") 

이 라인은 중복이없는 문자열을 포함하는 변수 RSTT에서

RSTT = "Form_LSE_FORM_ALL" & "!" & (RST) 

결과 테이블 LSE_FORM_ADMIN에 이미 바인드 된 양식 필드.

내가 이해하는 한, 연속 양식 (ADMIN?)이 LSE_FORM_Admin 테이블에 바인딩되어 있습니다. 이 양식의 레코드를 단계별로 실행하면 TITLE 필드/컨트롤의 값을 사용하는 코드를 실행하고 동일한 이름을 가진 컨트롤을 Form_LSE_FORM_ALL 폼에 사용하여 (in) ADMIN 폼의 체크 박스 컨트롤 이름 CB의 값에 따라 달라 지겠습니까?

ADMIN 양식에서 ALL 양식으로 변경 사항을 "라이브"하게하려면 CB 체크 상자 컨트롤의 이벤트 사용을 고려해야합니다. 양식의 현재 이벤트를 사용하면 방금 편집 한 레코드에서 나와 그 레코드에 대한 양식의 Current 이벤트를 발생시킬 때까지 사용자가 변경 한 내용이 ALL 양식에 반영되지 않습니다. CB 확인란

Private Sub CB_AfterUpdate() 

Dim strRST As String 
Dim frmTarget as Form 
Dim ctlRSTT As Control 

Set strRST = Me!TITLE 
Set frmTarget = Forms("Form_LSE_FORM_ALL") 
Set ctlRSTT = frmTarget.Controls(strRST) 

ctlRSTT.Visible = Me!CB 'getting Run-time error '424': object required 

End Sub 
+0

그건 그렇고, 몇 가지 버그를 해결하기 위해 몇 가지를 변경해야했지만 꿈과 같은 완벽한 작업과 양식 제어판이 환상적으로 작동합니다. 도와 줘서 고마워! 다음 답에 최종 코드를 게시하십시오. –

+0

당신은 환영합니다. Josiah ... 문자열 변수를 잘 잡습니다. 나에게 rst 또는 rs가있는 변수는 일반적으로 레코드 세트이므로 실수입니다. 변명은하지 말고 ... 설명. 변수 명명 규칙에 대한 기사를 읽는 것이 유용 할 것입니다. 표준 규칙을 사용하면 가독성과 디버깅 측면에서 많은 도움이됩니다. – Cheesenbranston

0

실제로 양식에서 테이블에 레코드 세트를 수행 할 때 구문을 수행하는 방법을 잘 모르겠다면, 도움이 필요합니다. 난 당신이 뭘 하려는지 알고

Private Sub Form_Current() 
Dim DB As Database 
Dim RS As Recordset 
Dim RST As String 

    Set DB = CurrentDb 
    Set RS = DB.OpenRecordset("LSE_FORM_ADMIN") 
    Set RST = RS    'GETTING OBJECT REQUIRED ERROR ON "RST =" 

    Do Until RS.EOF 
     RST = Me!TITLE 
     RS.MoveNext 
    Loop 

If Me!CB = "-1" Then 
Form_LSE_FORM_ALL!RS.Visible = True 
Else 
Form_LSE_FORM_ALL!RS.Visible = False 
End If 
End Sub 
+0

미안하지만 지금은 내 드로이드 만 있습니다. 코드가 레코드 세트 (쿼리 또는 테이블)를 열어야합니다 ... 코드가 참조되지 않습니다. 나는 내일 내 노트북을 가지고 당신을 위해 코드를 게시 할 수있다. .. –

+0

힌트를 보내 주셔서 감사 드리며, 레코드 셋의 문법은 조금 혼란 스럽다. 나는 이것이 어떻게 작동하는지 이해할 수 있도록 나에게 이것을 가르쳐 줄 사람을 찾아야한다. , 나는 jist가 변수를 설정할 변수에 적용 할 수있는 테이블과 같은 데이터 집합을 만드는 것입니다. 그러나 아직 그 방식으로 작동하지 않는 것 같습니다. –

0

내가 생각 하지만 설명/참조 최대 일치되지 않습니다 여기 레코드 세트에서 내 코드와 시도이다. 다음 주석을보고 명확히하십시오 : 1. "내 분야에서 제목을 취할 코드를 만들고 ..."하지만 당신의 코드는 "나. 제목", "나"는 폼에 대한 참조 - 필드가 아닙니다. 2. 코드가 "Form_Current"이벤트에 있습니다. 즉, 처리하는 모든 레코드에 대해 실행됩니다. 그게 효과가 있지만, 당신이 코드를 한 번만 더 효율적으로하고 싶다고 생각합니다. 3. 둘 이상의 필드를 처리 할 조항이 없습니다. 테이블의 모든 필드를 반복 할 필요가 있다고 생각합니다. 보이는 것을 true 또는 false로 설정해야합니다.

다음은 제 제안이지만 문제를 명확히하면 업데이트 될 것입니다.

Option Compare Database 
Option Explicit 

Dim DB  As DAO.Database 
Dim RS  As DAO.Recordset 
'Dim RST  As Variant 
'Dim RSTT As Variant 

Public Sub FORM_CURRENT() 

Set DB = CurrentDb 
Set RS = DB.OpenRecordset("LSE_FORM_ADMIN") 
Do While Not RS.EOF     ' Loop thru all field names for the form 
    If RS!HideYN = True Then   ' Desire to hide the field? 
     Me(RS!ctlname).Visible = False ' Yes, hide the field. 
    Else 
     Me(RS!ctlname).Visible = True ' No, show the field 
    End If 

    RS.MoveNext       ' Get next field name 
Loop 
RS.Close 
Set RS = Nothing 
Set DB = Nothing 
'Set RST = Me!Title 
'RSTT = "Form_LSE_FORM_ALL" & "!" & (RST) 

'If Me!CB = "-1" Then 
' RSTT.Visible = True 'getting Run-time error '424': object required 
'Else 
' RSTT.Visible = False 
'End If 

최종 하위

+0

다시 연락하지 못해 죄송합니다. 간단히 말해서 나는 컨트롤 패널과 같은 다른 형태를 지시하는 형식을 만들고있다. 이 작업을 수행하는 이유는 다른 직업 사이트를 다루는 것이므로 언제나 주변에있는 것은 아니므로 다른 "숙련 된 기술자"가 프로젝트의 필요에 맞게 내 양식을 변경할 수있는 더 쉬운 방법을 원했습니다. 또한 내 상사가 전자 메일의 필드 목록을 보내지 않고 상자를 체크하는 것만으로 쉽게 액세스 할 수 있습니다. 지금 나는 단지 그녀에게 이것을주고 그녀는 단지 그녀가 필요로하는 것을 검사하고 그것을 적재하고 완성한다. 그래서 어떻게 함께 작동하는지보고 싶으면 알려주세요. –

0

최종 코드, Cheesenbranston에게 감사의 대한 AfterUpdate 이벤트를 사용

예.

Private Sub Form_AfterUpdate() 
Dim strRST As String 
Dim frmTarget As Form 
Dim ctlRSTT As Control 

strRST = Me!TITLE 
Set frmTarget = Forms("LSE_FORM_ALL") 
Set ctlRSTT = frmTarget.Controls(strRST) 

    If Me!CB = "-1" Then 
     ctlRSTT.Visible = True 
     Else 
     ctlRSTT.Visible = False 
    End If 
End Sub 

@Cheesenbranston : 원래 코드는 더에의 전환처럼 내 객체가 표시 아니었다면을 선택하면 다음 내 트리거 확인란이 더 내 자신의 필요에 대한 삶의 질, 그것을 볼 수 있도록 할 수 있도록 떠났다 , 적은 일은 없다. 또한 strRST 그냥 문자열 이후 SET 필요하지 않습니다. 다시 한번 감사드립니다. = D 매우 행복한 날!

관련 문제