2016-11-19 2 views
1

Ich habe ein Formular in Access, das einem Benutzer ermöglicht, eine Tabelle aus einem Kombinationsfeld auszuwählen, das alle Tabellen auflistet, die VBA verwenden. Basierend auf der Tabelle, die der Benutzer auswählt, möchte ich eine Reihe von Kontrollkästchen dem Formular hinzugefügt werden. Jedes Kontrollkästchen würde eine Spalte in der ausgewählten Tabelle darstellen. Ich habe eine VBA-Funktion, die mit den Spalten funktioniert, die über das Formular ausgewählt werden, nachdem eine Schaltfläche gedrückt wurde.Wie können Sie einem Formular auf der Basis von Spalten in der Tabelle in Access Kontrollkästchen hinzufügen?

Wie würde ich die Kontrollkästchen aktivieren, nachdem der Benutzer eine Tabelle ausgewählt hat? Ich möchte, dass dieses Formular auf Tabellen angewendet wird, die in Zukunft hinzugefügt werden, sodass ich die Anzahl der Spalten nicht im Voraus weiß. Ich kann Kontrollkästchen in einem Benutzerformular dynamisch angezeigt bekommen, aber ich habe gehört, dass sie in Access nicht häufig verwendet werden. Ich habe auch gehört, dass es eine Begrenzung für die Anzahl der Kontrollen gibt, die zu einem Formular in seiner Lebenszeit hinzugefügt werden können. Gibt es sowieso Umbenennungskontrollen, so dass ich dieses Limit nicht erreiche?

Dies ist der Code, dass ich das Kombinationsfeld aufzufüllen verwenden:

Private Sub Form_Load() 

Dim tbl As DAO.TableDef 
Dim db As Database 

Set db = CurrentDb 
With Me![TableName] 
    For Each tbl In db.TableDefs 
     If Not (tbl.name Like "MSys*" Or tbl.name Like "~*") Then 
      .AddItem tbl.name 
     End If 
    Next 
End With 

End Sub 

Dies ist Beispielcode, der die Kontrollkästchen in einer Userform erzeugen kann:

Private Sub RetrieveColumns_Click() 

Dim TableName As String 
Dim MethodName As String 
Dim tdf As DAO.TableDef 
Dim rs As Recordset 
Dim fld As Field 
Dim chkBox As MSForms.CheckBox 

TableName = Me![TableName] 
Set tdf = dbs.CreateTableDef(TableName) 

Set rs = dbs.OpenRecordset(TableName) 

With rs 
    For i = 0 To .Fields.Count - 1 
     Set chkBox = Me.Controls("Forms.checkbox.1", "CheckBox_" & i) 
     chkBox.Caption = .Fields(i).name 
     chkBox.Left = 5 
     chkBox.Top = 5 + ((i - 1) * 20) 
    Next i 
End With 

End Sub 

Antwort

0

Die beste Lösung wäre, ein fortlaufendes Formular/Datenblatt, das alle Tabellenspaltennamen mit einem angrenzenden Kontrollkästchen anzeigt.

Erstellen Sie eine Tabelle mit ColumnName (Text) und Checked (Ja/Nein, Standard Nein).

Dann, wenn eine Tabelle ausgewählt ist:

  • löschen * aus dieser Tabelle,
  • In Ihrem .Fields Schleife, fügen alle Spaltennamen in dieser Tabelle
  • und zeigen die Tabelle als Unterformular (bzw. haben Sie die Tabellenauswahl-Combobox im Formularkopf).

Damit benötigen Sie keine dynamischen Steuerelemente.


Alternativ, für eine wirklich einfache Lösung, verwenden Sie eine Multi-Select-Listbox.

Ein Listenfeld hat das leicht obskure RowSourceTypeFeldliste.

Die Daten sind eine Liste von Feldnamen aus einer Tabelle, einer Abfrage oder einer SQL-Anweisung, die in der Einstellung RowSource angegeben sind.

Alles, was Sie benötigen, ist, die Eigenschaft RowSource auf den ausgewählten Tabellennamen zu setzen.

+0

Danke! Ich dachte nicht daran, den zusätzlichen Tisch zu benutzen. – kaineub

Verwandte Themen