2016-07-24 45 views
0

我目前有一个更新事件后,它会循环显示表单中的文本框,并在其编号低于特定阈值数时切换其可见性。更新事件后,无法在MS Access中切换标签的可见性

Dim i As Long  
     Dim iMin As Long  
     Dim iMax As Long  
     iMin = 1 
     iMax = Me.txtMeasure.Value 
     With Me 
      For i = iMin To iMax 
           .Controls("V" & i).Visible = True 
      Next i 
     End With 

的文本框被命名为V1, V2, V3...V110等 “而对应于每个文本框的标签标记lblV1lblV2lblV3lblV110等。”文本框和标签默认为不可见,而更新后事件切换其可见性。该代码适用于文本框,但无法用于标签。我注意到,虽然标签看起来不可见,但切换到设计视图然后返回窗体视图,标签突然显现。有没有一种方法可以调试,以便它们同时显示?

+0

其中是将标签设置为可见的代码? – 3per

+0

我是新来的访问,这个代码是通过另一个stackflow用户提供给我的。我认为,由于文本框和标签被命名为V1和lblV1,因此代码会调整这两者。 http://stackoverflow.com/questions/38510238/cycling-through-textboxes-on-form-in-ms-access – YoungsterJerry

+0

如果标签附加到他们的文本框,他们应该自动设置为可见/不可见与他们的父母文本框。 – Andre

回答

0

试试这个,它遍历控制和如果它是一个textboxlabel你可以做你想要与他们的东西,我已经在这个代码将它们设置为Visible

Dim con As Control 
Dim i As Long 
Dim iMin As Long 
Dim iMax As Long 
Dim textBoxArr 
Dim j As Long 
     iMin = 1 
     iMax = Me.txtMeasure.Value 
    textBoxArr = Array("V1", "V2", "V3", "V4", "V5", "V6", "V7") 
    For Each con In Me.Controls  
     If TypeName(con) = "TextBox" Or TypeName(con) = "Label" Then 
      For j = 0 To UBound(textBoxArr) 
      If con.Name = textBoxArr(j) Or con.Name = "lbl" & textBoxArr(j) Then 
       con.Visible = True: Exit For 
      End If 
      Next j 
     End If 
    Next con 
+0

这使得所有110个文本框和标签都可见。我只需要显示与“Me.txtMeasure.Value”一样多的文本框(因此原始的循环)。 – YoungsterJerry

+0

我无法为你做到这一点。你需要测试'if'语句中的每个'control',并过滤出你想看到的那些。如果你不知道该怎么做,请回到我身边。 – KyloRen

+0

好的,我更新了代码,至少测试了“textbox”和“Label”。您将不得不调整代码以适应您的控件的名称。 – KyloRen

0

您只能在代码中添加一行。

 Dim i As Long  
     Dim iMin As Long  
     Dim iMax As Long  
     iMin = 1 
     iMax = Me.txtMeasure.Value 
     With Me 
      For i = iMin To iMax 
           .Controls("V" & i).Visible = True 
           .Controls("lbl" & i).Visible = True 
      Next i 
     End With