2017-12-20 22 views
0

저는 내 userform에 많은 컨트롤을 가지고 있으며 "로그인 버튼"과 "Shift Date"텍스트 상자를 제외하고로드시 모두 비활성화하려고합니다. 아래의 코드를 사용하여 :로드시 ms 액세스 사용자 폼의 모든 필드를 비활성화 할 수 없습니다.

Private Sub Form_Load() 
Call GetValues 
Me.WlcmLabel.Caption = "Hi " + GetUserName + " ! " 

Dim ctrl As Control 

For Each ctrl In Me.Controls 
    ctrl.Enabled = False 
Next 
Me.ShiftDate.Enabled = True 
Me.LoginBtn.Enabled = True 
Set ctrl = Nothing 
End Sub 

하지만이 말을 나에게 부하에 오류가 있습니다 "개체가이 속성 또는 메서드를 지원하지 않습니다."

사용자가 로그인 버튼을 클릭하자마자 모든 컨트롤이 활성화됩니다.

내 코드의 실수는 무엇입니까?

기타 필요한 정보가 있는지 물어보십시오. 감사합니다!

답변

1

대신 컨트롤을 잠급니다. 아래에 locked 속성을 사용했지만 각 컨트롤의 tag 속성을 사용하여 lockable으로 식별했습니다. 따라서 잠그고 싶지 않은 컨트롤은 태그 속성에 아무 것도 가져 오지 않으므로 잠그지 않습니다. 응용 프로그램에서는 두 개의 컨트롤을 잠금 해제 상태로두기를 원하기 때문에 논리를 뒤집을 수 있습니다.

For Each ctlCurr In Me.Controls 
     If ctlCurr.Tag = "Lockable" Then 
     ctlCurr.Locked = True 
     End If 
Next 
+0

아무 것도 잠그지 않았습니다. –

+0

수정 된 코드를 표시 할 수 있습니까? 나는 이와 같은 통제를 자주 잠그고 문제가 있습니까? 흠 ... – KenSquare

+0

확실히, 여기 Me.Controls에서 각 ctlCurr에 대한 제어 으로 난로드 이벤트에서 사용하고있는 코드, '희미한 ctlCurr이다 ctlCurr.Tag = "잠금"그럼 ctlCurr.Locked = 진정한 하는 경우 End If 다음 Me.ShiftDate.Enabled = True Me.LoginBtn.Enabled = True ' –

1

오류가 오는 이유 인 라벨 컨트롤을 사용 중지 할 수 없습니다. 컨트롤 유형을 확인해야합니다.

For Each ctrl In Me.Controls 
    With ctrl 
    a = TypeName(ctrl) 
    Select Case .ControlType 

     Case acLabel 

     Case acEmptyCell 

     Case Else 
      ctrl.Enabled = False 
    End Select 
    End With 


Next ctrl 

레이블이없는 경우에만 적용을 적용하십시오.

+0

이것에 대한 설명을 해 주셔서 감사합니다. 아무런 오류도주지 않았지만 아무것도 사용하지 않았습니다. 어떻게해야할까요? –

+0

@shivchhabra \t 위의 답변을 편집했습니다. 위의 코드를 확인하고 작동하지 않는지 알려주십시오. –