2017-11-01 10 views
0

정크 데이터가 데이터베이스에 입력되는 것을 방지하기 위해 일부 VBA 자동화 기능이있는 Access에서 양식이 있습니다. 자동화의 일부는 사용자가 선택을 취소 한 단계의 단계를 제거하는 것입니다. 선형 프로세스를 추적하므로 1, 2, 3 및 4 단계가 완료되고 사용자가 2를 선택 취소하면 코드가 3과 4를 선택 해제합니다.Access VBA에서 명령의 일부로 문자열 변수를 사용할 수 있습니까?

이 단계는 가능한 여러 테스트 양식에 걸쳐 펼쳐집니다. 프로그램이 자동 체크를하지 않고 호출 할 수있는 하나의 서브 루틴을 코딩하고 사용자가 클릭 한 테스트 양식을 기반으로 서브에 변수를 전달하려고합니다.

내 코드는 작동하지 않습니다. ("드라이"와 "젖은"순서대로, 그 과정에서 단계입니다.) :이 T2로 내 데이터베이스와 코드에 정의 된 시험 양식 2 만이다

Private Sub t2Dry_AfterUpdate() 
    Dim TFNum As String 
    TFNum = "t2" 
    'Autodate and expose wet check fields once t2dry box is checked 
    If t2Dry Then 
    t2DDate.Enabled = True 
    t2DDate.SetFocus 
    t2DDate = Date 
    t2Wet_Label.Visible = True 
    t2Wet.Visible = True 
    t2Wdate_Label.Visible = True 
    t2Wdate.Visible = True 
    End If 

    'If dry box unchecked after date entered, undo all subsequent steps 
    If Not t2Dry And t2date = "" Then 
    Dim t2DUnchk As Byte 
    t2DUnchk = msgbox("Unchecking this box will clear all subsequent data. Are you sure?", vbYesNo + vbQuestion, "Undo this step?") 
    If t2DUnchk = vbYes Then 
    t2DDate.SetFocus 
    t2DDate = "" 
    t2DDate.Enabled = False 
    clearWetData (TFNum) 
    Else: t2Dry = True 
    t2DDate.SetFocus 
    End If 
    End If 

End Sub 

참고. 이것이 TFNum 변수를 선언 한 이유입니다. 아래에서 7 줄을 보면, 사용자가 마른 상자를 선택 취소하고 젖은 데이터가있는 경우 젖은 데이터를 지우도록 작성한 서브 루틴을 호출하는 것을 볼 수 있습니다. 코멘트 후 첫 번째 줄 내가 할 노력하고있어의 예입니다

Private Sub clearWetData(TFNum) 

     'Call this subroutine to clear wet data from test forms on uncheck of dry comm step. 
     'This subroutine relies on the TFNum argument to decide which test form's wet data to clear. 
     (TFNum)Wet = False 
     t2Wdate.Visible = True 
     t2Wdate.Enabled = True 
     t2Wdate.SetFocus 
     t2Wdate = "" 
     t2Wdate.Enabled = False 
     t2Wet_Label.Visible = False 
     t2Wet.Visible = False 
     t2Wdate_Label.Visible = False 
     t2Wdate.Visible = False 

End Sub 

그건 :의 일환으로 (텍스트 "T2"를 포함하는 문자열입니다) 전달 된 변수 TFNum을 사용하여 다음 서브 루틴입니다 객체 명. "t2Wet"은 내가 지우려고하는 내 체크 박스 객체 중 하나의 이름입니다. 그래서 그것을 구문 분석하고 싶습니다.

t2로 시작하는 나머지 코드는 모두 작동합니다. 서브 루틴은 호출 될 때 체크 박스를 제외한 모든 것을 지 웁니다.

짧은 소설 죄송합니다. 가능한 한 자세하게 설명하고 싶었습니다. 당신의 도움을 주셔서 감사합니다!

답변

0

제가 이해 하듯이 (TFNum) Wet은 양식의 컨트롤입니다. 이 질문은 오래 지속되지 않았습니다 알고 있지만 사무실에서 친구가 나를 위해 그것을 해결,

Me.Controls(TFNum & "Wet") = False 
0

자 : 그런 경우에는, 당신은 단지 Controls 컬렉션을 사용할 수 있습니다.

같을 필요가 서브 루틴의 코드는 :

Private Sub clearWetData(TFNum As String) 

    'Call this subroutine to clear wet data from test forms on uncheck of dry comm step. 
    'This subroutine relies on the TFNum argument to decide which test form's wet data to clear. 
    Me.Controls(TFNum & "Wet") = False 
    Me.Controls(TFNum & "Wdate").Visible = True 
    Me.Controls(TFNum & "Wdate").Enabled = True 
    Me.Controls(TFNum & "Wdate").SetFocus 
    Me.Controls(TFNum & "Wdate") = "" 
    Me.Controls(TFNum & "Wdate").Enabled = False 
    Me.Controls(TFNum & "Wet_Label").Visible = False 
    Me.Controls(TFNum & "Wet").Visible = False 
    Me.Controls(TFNum & "Wdate_Label").Visible = False 
    Me.Controls(TFNum & "Wdate").Visible = False 

End Sub 

Me.Controls 모든 형태 컨트롤 배열이다. 원하는 폼 컨트롤 대신 직접 호출하여 TFNum 변수와 상호 작용할 폼 컨트롤을 정의하는 문자열의 일부로 사용할 수 있습니다.