PDA

Vollständige Version anzeigen : Spalten fixieren


Karsten68
26.09.2005, 20:06
Hallo Leute,
ich finde einfach keinen Code für

Spalte fixieren.

Da ich zwei verschieden Ansichten programmieren will, reicht das manuelle fixieren nicht, ich muss dies im Code miteinbauen.
Kann jemand helfen.
Vielan Dank im Voraus

JörgG
26.09.2005, 20:42
Hallo Karsten,

ich bin mir nicht sicher ob A00 schon über die optimale Breite verfügt, probiers mal aus.
Private Sub Form_Open(Cancel As Integer)
Dim rst As DAO.Recordset, ctl As Control, I As Byte
On Error Resume Next 'nicht alle Steuerelementtypen haben diese Eigenschaft
Set rst = Me.RecordsetClone
For I = 0 To rst.Fields.Count - 1
Set ctl = Me.Controls(rst.Fields(I).Name)
If ctl.Name <> "Notiz" Then 'überlanges Feld "Notiz" begrenzen
ctl.ColumnWidth = -2 'optimale Breite
ctl.ColumnHidden = False 'ein-/ausblenden
Else
ctl.ColumnWidth = 5000 'Twips
Next I
rst.Close: Set rst = Nothing: Set ctl = Nothing
End Sub
Teste den Code auch mal im Klick-Ereignis des Forms.

Karsten68
27.09.2005, 06:38
Hallo Joerg,
ohne deine Code getestet zu haben. Ich meinte mit fixieren nicht die optimale breite.
Sondern das "feststellen einer Spalte".
Bewegt man dann die untere Bildlaufleiste, werden die fixierten Spalten nicht nach links oder rechts mitbewegt.
Der manuelle Aufruf ist über Menü Format - Spalten fixieren.
Bitte nochmals um hilfe.
Karsten

JörgG
27.09.2005, 12:37
Hallo Karsten,

wenn Du die Spaltenfixierung vorgenommen hast behält (speichert) Ac diese Einstellung, ansonsten eine Möglichkeit:
Private Sub Form_Open(Cancel As Integer)
Dim I As Integer, Ctl As Control
For I = 0 To 2 'die ersten 3 Felder fixieren, 0 = 1.Feld
'If i > Me.RecordsetClone.Fields.Count - 1 Then Exit For
Set Ctl = Me.Controls(Me.RecordsetClone.Fields(I).Name)
Ctl.SetFocus
DoCmd.RunCommand acCmdFreezeColumn
Next I
End Sub
oder einfach:
Me!DeinFeld.SetFocus
DoCmd.RunCommand acCmdFreezeColumn

Karsten68
29.09.2005, 13:18
Hallo Joerg,
erstmal: es ist genau das was ich Suche.
trotzdem zwei Probleme:
Variante 2 sagt mir access, der Befehl Spalte fixieren steht momentan nicht zur Verfügung, obwohl es manuell geht.
Variante 1 ging auch nicht da bekomme ich unzulässige Verwendung von RecordsetClone - das kann allerdings daran liegen das ich die Verweise auf das UFO noch nicht richtig gesetzt habe .
Falls Du noch Hilfmöglichkeiten siehst, danke im voraus.
Karsten

JörgG
29.09.2005, 15:16
Hallo Karsten,

Fehlerquelle könnte sein:
1. das Feld ist gesperrt und kann den Fokus nicht empfangen
2. Recordsetclone greift auf die Datenherkunft zu, wenn im UFO nicht alle Spalten angezeigt werden, wird diese nicht gefunden, dann greife direkt auf die Spaltennamen zu.
3. probier ein anderes Ereignis
Private Sub Form_Click()
Dim i As Integer, Ctl As Control
For Each Ctl In Me.Controls
If Ctl.Name = "FeldA" Or Ctl.Name = "FeldB" Or Ctl.Name = "FeldC" Then
Ctl.SetFocus
DoCmd.RunCommand acCmdFreezeColumn
i = i + 1
If i = 4 Then Exit For
End If
Next Ctl
End Sub

Karsten68
30.09.2005, 08:28
Hallo Jörg,
all is pretty - stammt nicht von mir - aber jetzt mal im ernst, nach ein wenig Feinabstimmung läuft es mit der 2. Version.
Wichtig ist - wie so oft - die richtige Focussierung. Ich musste vor deinem Code den Focus nochmal auf das UFO lenken und natürlich Me.Controls durch meinen "Pfad",
und FeldA-C durch meine Bezeichnungen, ersetzen.
Vielen Dank, Gruß K.