2016-03-21 5 views
0

Ich habe ein Formular mit einem Unterformular, das Datensätze anzeigt, und der Benutzer ist in der Lage, dieses Unterformular neu anzuordnen und ihre Einstellungen zu speichern. Dies bedeutet, dass sie die Breite der Spalten, die Reihenfolge, die Spalten usw. ändern und ihre Änderungen jederzeit speichern können. Diese Änderungen werden beim nächsten Laden des Formulars übernommen. Dies geschieht, indem die Voreinstellungen in einer Tabelle gespeichert und dann diese Voreinstellungen aus der Tabelle im Form_Load-Ereignis des Unterformulars abgerufen werden. Das alles funktioniert gut, aber ich versuche, die Möglichkeit zu speichern, auch eingefrorene Spalten zu speichern. Ich kann verfolgen, wie viele Spalten eingefroren sind, und ich bin auch in der Lage, die Reihenfolge der Spalten wiederherzustellen, so dass es einfach sein sollte, alle Spalten aufzuheben und dann die ersten X-Spalten wieder einzufrieren.Entsperren von Spalten in einem Unterformular in Access

Ich weiß, dass ich 'RunCommand acCmdUnfreezeAllColumns' verwenden kann, um alle Spalten aufzuheben. Ich weiß auch, dass ich den Fokus auf das Formular verwenden muss, also habe ich versucht myForm.setFocus (wobei myForm eine Referenz auf das Unterformular ist) zu tun, bevor ich die Spalten auffrische. Dies gibt den Fehler "Es gibt eine ungültige Methode in einem Ausdruck". Ich dachte, das liegt vielleicht daran, dass Sie den Fokus nicht auf ein Formular mit aktivierten Steuerelementen setzen können, also habe ich stattdessen myForm.Controls(0).SetFocus ausprobiert. Dies gibt keinen Fehler und scheint den Fokus auf die erste Zelle im Unterformular basierend auf dem Wert Screen.ActiveControl (und der Tatsache, dass die Zelle den Fokus nach dem Laden des Formulars hat) zu setzen. Ich bekomme dann aber den Fehler "Der Befehl oder die Aktion 'UnfreezeAllColumns' ist jetzt nicht verfügbar." auf der Linie RunCommand acCmdUnfreezeAllColumns. Ich dachte auch, dass ich vielleicht Probleme hatte, weil ich versuchte, mich auf ein Load-Ereignis zu konzentrieren, also versuchte ich zuerst die Repaint-Methode aufzurufen, aber das machte keinen Unterschied. Ich habe daran gedacht, alle Spalten in der Entwurfsansicht aufzuheben, damit ich sie zur Laufzeit nicht auftauen muss, aber der Benutzer hat möglicherweise keine Einstellungen gespeichert, und ich möchte, dass einige Spalten standardmäßig eingefroren werden.

Ich habe keine Ideen mehr dazu. Was genau muss geschehen, damit der Befehl alle Spalten aufheben kann? Oder gibt es eine einfachere Möglichkeit, dies zu tun, die ich vermisse? Die Lösung muss vielseitig genug sein, um auf jedem Unterformular mit beliebigen Feldnamen zu arbeiten. Beachten Sie, dass ich eine Liste der Feldnamen habe, die vorhanden waren, als der Benutzer seine Einstellungen speicherte, aber ich kann nicht garantieren, dass sie alle noch vorhanden sind, wenn ihre Einstellungen wiederhergestellt werden.

Antwort

0

Diese normalerweise für mich gearbeitet:

myForm.SetFocus 
RunCommand acCmdUnfreezeAllColumns 

jedoch manchmal versagt es, so habe ich versucht, es zu wiederholen:

On Error Resume Next 
myForm.SetFocus 
RunCommand acCmdUnfreezeAllColumns 
If Err.Number <> 0 Then 
    myForm.SetFocus 
    RunCommand acCmdUnfreezeAllColumns 
End If 
On Error GoTo 0 

, dass fast immer funktioniert, aber die Menübefehle sind nicht zu 100% zuverlässig.

Verwandte Themen