2017-06-07 1 views
0

Ich versuche 30 Objekte auf meinem Formular zu verstecken/zu verbergen, wenn der Benutzer bestimmte Werte aus einem Dropdown-Menü auswählt. Ich habe versucht, die Schleife unten, aber ich erhalte den folgenden Fehler: "Objekt unterstützt diese Eigenschaft oder Methode nicht." Ich habe diesen Code auf dem 'AfterUpdate' des Dropdown-Menüobjekts ausgeführt.Access For Loop Objekte ausblenden

Dim VisibleVisitFields() As String 
Dim VisibleVisitFieldlist As String 
Dim varVisibleVisit As Variant 
VisibleVisitFieldlist = "VisitDate_Event,VisitTime_Event,VisitSite_Event,VisitStaff_Event,VisitMeet_Event" 
VisibleVisitFields = Split(VisibleVisitFieldlist, ",") 

If (EventType = 3) Then 
    For Each varVisibleVisit In VisibleVisitFields 
    [Forms]![subFRM_TBL_Event-All in One].Controls(varVisibleVisit).visible = True 
    Exit For 
Next 
Else 
If (EventType <> 3) Then 
    For Each varVisibleVisit In VisibleVisitFields 
    [Forms]![subFRM_TBL_Event-All in One].Controls(varVisibleVisit).visible = False 
    Exit For 
Next 
End If 
End If 

Antwort

1

Welche Zeile löst den Fehler aus? Vermute, dass es sich um einen Verweis auf das fehlerhafte Teilformular handelt. Niemals einen solchen Code zum Durchlaufen eines Arrays gesehen. Schlagen Sie den Benennungs-Teilformularcontainer anders als das Objekt vor, das er enthält, z. B. ctrEvent. Was ist EventType - ein Textfeld/Feld im Formular? Betrachten Code:

Dim aryFields As Variant 
Dim x As Integer 
aryFields = Split("VisitDate_Event,VisitTime_Event,VisitSite_Event,VisitStaff_Event,VisitMeet_Event", ",") 
For x = 0 To UBound(aryFields) 
    Me.ctrEvent.Form.Controls(aryFields(x)).Visible = Me.EventType = 3 
Next 

Alternative Methoden nicht Array mit:

Set Steuer Tag-Eigenschaft dann Code durchläuft alle Bedienelemente auf Form und stellt die Sichtbarkeit für diejenigen, die in bestimmten Wert Tag haben.

Dim ctrl As Control 
For Each ctrl in Me.ctrEvent.Form.Controls 
    If ctrl.Tag = "something" Then ctrl.Visibility = Me.EventType = 3 
Next 

Ein weiterer Grund ist Kontrollen ähnliche Namen zu geben, wie: Visit1, Visit2 usw. Dann Code:

Dim x As Integer 
For x = 1 to 30 
    Me.ctrEvent.Form.Controls("Visit" & x).Visible = Me.EventType = 3 
Next 

Tipp keine Leerzeichen oder Satzzeichen/Sonderzeichen (einzige Ausnahme unterstreichen) Konvention zu benennen.

+0

Ja, es ist die Referenz. Vorher hatte ich Me.Controls (varVisibleList) .visible. Aber der gleiche Fehler ist aufgetreten. EventType ist das Dropdown-Menü aus dem Formular. Ich werde deinen Code ausprobieren. Danke – xpandamonium

+0

Sie möchten Sichtbarkeit für 30 Kontrollen einstellen? Siehe Bearbeitungen zur Antwort. – June7

0

Sie versuchen, über ein Array von Strings zu iterieren.

Dim VisibleVisitFields() As String 

Sie benötigen das Array zu deklarieren Varianten enthalten (die noch Zeichenfolgen enthalten können)

Dim VisibleVisitFields() As Variant