Meine Frage bezieht sich auf folgende Tabellen und Form. image3 und image4 sind die gleiche Form, die Daten aus Table_2 (image2) lädt. Mit Table_Setting (image1) wird definiert, welche Attributspalte im SubForm von MainForm (image3 und image4) sichtbar sein soll. Das heißt, ob die Spalten im Unterformular sichtbar sind, wird vom Benutzer in Table_Setting (image1) definiert. Laut Table_Setting sollte SubForm beispielsweise Author, Publisher, BookName anzeigen, wenn der BookType in MainForm "neu" ist. Wenn der BookType "Lehrbuch" ist, zeigen Sie nur Publisher, PublishYear an.
Zugriff VBA-Set Form Spalte Sichtbarkeit von anderen Tabelle ohne hart Codierung
image1:
image2:
image3:
image4:
Ich weiß, dass die folgenden Codes können festlegen, ob die Spalte in der SubForm sichtbar ist oder nicht. Aber das ist eine harte Codeversion. Es ist nicht flexibel genug, wenn der Benutzer die Table_Setting-Tabelle aktualisiert.
Private Sub Form_Load()
Select Case Forms![SubForm]!BookType
Case "novel"
Me.BookType.Visible = True
Me.Author.Visible = True
Me.Publisher.Visible = True
Me.BookName.Visible = True
Me.PublishYear.Visible = False
Case "research"
Me.BookType.Visible = True
Me.Author.Visible = False
Me.Publisher.Visible = False
Me.BookName.Visible = False
Me.PublishYear.Visible = True
Case "text book"
Me.BookType.Visible = True
Me.Author.Visible = Falss
Me.Publisher.Visible = True
Me.BookName.Visible = False
Me.PublishYear.Visible = True
End Select
End Sub
Meine Frage:
Mein quesiton ist: ist es möglich, einige Codes zu schreiben, um automatisch die Spalte Sichtbarkeit einfach nach dem Table_Setting Tisch, während keine Notwendigkeit, harten Code für jede Spalte in SubForm eingestellt? So kann der Benutzer einfach die anzuzeigenden Spalten ändern, indem er nur die Table_Setting-Tabelle udiert. Danke vielmals.
Update1:
Ich betreibe die folgenden Codes in Mainform.
Private Sub Form_Load()
Dim RST As Recordset
Dim strBookType As String
Dim strSQL As String
strBookType = Me.BookType
' Set visible controls
strSQL = "SELECT Attribute FROM Table_Setting WHERE BookType = '" & strBookType & "'"
Set RST = CurrentDb.OpenRecordset(strSQL)
If Not RST.BOF Then
While Not RST.EOF
Me!Table_2_DataSheet.Form.Controls(RST!Attribute).Visible = True 'Table_2_DataSheet is the subform name
RST.MoveNext
Wend
End If
RST.Close
' Set invisible controls
strSQL = "SELECT DISTINCT(Attribute) FROM Table_Setting WHERE Attribute NOT IN (SELECT Attribute FROM Table_Setting WHERE BookType='" & strBookType & "')"
Set RST = CurrentDb.OpenRecordset(strSQL)
If Not RST.BOF Then
While Not RST.EOF
Me!Table_2_DataSheet.Form.Controls(RST!Attribute).Visible = False 'Table_2_DataSheet is the subform name
RST.MoveNext
Wend
End If
RST.Close
Set RST = Nothing
End Sub
Update2:
Ich betreibe die folgenden Codes in SubForm.
Private Sub Form_Load()
Dim RST As Recordset
Dim strBookType As String
Dim strSQL As String
strBookType = Me.Parent.BookType
' Set visible controls
strSQL = "SELECT Attribute FROM Table_Setting WHERE BookType = '" & strBookType & "'"
Set RST = CurrentDb.OpenRecordset(strSQL)
If Not RST.BOF Then
While Not RST.EOF
Me.Controls(RST!Attribute).Visible = True
RST.MoveNext
Wend
End If
RST.Close
' Set invisible controls
strSQL = "SELECT DISTINCT(Attribute) FROM Table_Setting WHERE Attribute NOT IN (SELECT Attribute FROM Table_Setting WHERE BookType='" & strBookType & "')"
Set RST = CurrentDb.OpenRecordset(strSQL)
If Not RST.BOF Then
While Not RST.EOF
Me.Controls(RST!Attribute).Visible = False
RST.MoveNext
Wend
End If
RST.Close
Set RST = Nothing
End Sub
vielen Dank für die Bereitstellung der inspirierenden Idee. Ich versuchte Ihren Ansatz und die Codes in MainFom und SubForm, aber SubForm lädt immer noch alle Spalte (ohne Fehlermeldung), habe ich die Codes in der Unterseite meiner Frage, udpate1 und update2, appreate, wenn Sie oder jemand zur Verfügung stellen können Hinweise. Danke noch einmal. – Will
es funktioniert !! Die Codes sind wirklich erstaunlich !! Danke vielmals! – Will