Durch Programm erstellte Textboxen umbenennen und ansprechen

I

Igelkuesser

Hallihallo,

Ich habe ein Problem:
Als Vorbereitung auf meine VBA-Abschlussprüfung habe ich ein bisschen herumgefrickelt während der arbeit und mir ein Beispielprojekt in Excel 2007 erstellt.
Schwierigkeiten hatte ich beim Anzeigen von Daten aus einer Access-Datenbank. Wie zeige ich die an? Habs schon mal mit einer Listbox probiert, da kann man ja auch mehrere Spalten anzeigen lassen, dummerweise kann man bei der Listbox nur einen Eintrag, und nicht etwa ein "feld" auswählen (feld im sinne von Schnittpunkt einer spalte und zeile). MSFlexGrid habe ich auch kurz ausprobiert, aber habe ich es nicht geschafft, mehrere Spalten zu erstellen und laut mehreren Forenbeiträgen kann man die Daten darin nicht bearbeiten.

Deshalb kam ich auf die glorreiche idee, für jedes feld eine textbox zu erstellen, war noch recht spannend bis alles geklappt hat. Dummerweise kann ich die so erstellten Textboxen weder ansprechen noch umbenennen.

Frage: Wie soll ich das anstellen? ^^

(Falls ihr euch fragt warum überhaupt per Programm erstellen: Die Anzahl der Recordsets in der datenbank sind dynamisch, also mal mehr, mal weniger.)

Im Anhang ein Bild, wie es aussieht. (Wo ich arbeite muss euch nicht interessieren, darum geschwärzt ;) ) Ja ich weiss, ist noch nicht fertig, ist auch in wenigen Stunden entstanden...

Hier der Code der Funktion, welche die Textboxen erstellt:
Code:
Public Function TextBoxErstellen()
    Dim i As Integer 'zähler zeilen
    Dim j As Integer 'zähler "spalten"
    
    Dim left As Integer
    Dim top As Integer
    Dim width As Integer
    Dim height As Integer
    
    Dim totalleft As Integer
    Dim totaltop As Integer
    
    left = 6
    top = 6 + 15.75
    width = 18
    height = 15.75
    
    Dim objTextBox As MSForms.TextBox
    
    i = 0
    j = 0
    Do While i < 30 '6 zeilen
        j = 0
        
        totalleft = 6 'mindestabstand von oben: 6 (hier wird er auf 6 zurückgesetzt)
        
        Do While j < 21 '21 "spalten"
            
            Select Case j 'boxen sind unterschiedlich lang.
                Case 1 'index startet bei 0, also 1 = 2.box
                    width = 84 'breite der längsten box
                Case 10 To 14
                    width = 30 'breite der mittleren boxen
                Case Else
                    width = 18 'normale breite
            End Select
            
            top = (i * 15.75) + 6 + 15.75 '6=standardwert, 15.75 = 1. (manuell erstellte) box
            
            Set objTextBox = frmTabelle.Controls.Add("Forms.TextBox.1", "txtDemo0", True)
            With objTextBox
                .left = totalleft 'wird immer weiter nach rechts gerutscht
                .top = top
                .width = width
                .height = height 'fixer wert
                .SelectionMargin = False 'minimaler Einzug der Box links muss weg
                
            End With
            Set objTextBox = Nothing
            
            totaltop = top + 15.75 + 6 'so wird die maximale höhe herausgefunden
            totalleft = totalleft + width 'so wird der abstand links korrekt berechnet
            
            j = j + 1
        Loop
        i = i + 1
    Loop
    
    'totaltop enthält nun die totale höhe der felder.
    'anpassen der höhe von frmTabelle
    If frmTabelle.height < totaltop Then
        frmTabelle.ScrollHeight = totaltop
    Else
        frmTabelle.ScrollHeight = frmTabelle.height - 4
    End If
End Function

Oder gäbe es noch eine andere Variante wie ich die Daten darstellen könnte?
Wäre offen für Vorschläge :)

so... Feierabend ruft

Mahlzeit,

Phil
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    85 KB · Aufrufe: 186
Zurück