上回发了示例
Access快速开发平台--记录每个用户数据表窗体的列宽列序和隐藏列[Access软件网]
http://www.accessoft.com/article-show.asp?id=19935
最近对示例进行了优化处理,分享给大家学习。
附 件:
盟威Access快速开发平台V2.5.1版(32位)_记录用户列序列宽隐藏列_优化
代 码:
Public Function LayoutColumn(Frm As Object) '返出列
On Error Resume Next
DoCmd.SetWarnings False
Dim ctl As Control
Dim cnn As New ADODB.Connection
Set cnn = CurrentProject.Connection
Dim UsName As String
UsName = GetParameter("Current User Username") '当前用户名
strSQL = "select [FieldsName],[ColumnHide],[FieldsColumnSN],[ColWidth] from [tblUserFrmSetting] where [UserName]=" & SQLText(UsName) & " and [FrmName]=" & SQLText(Frm.Name) & " order by FieldsColumnSN"
Set rs = cnn.Execute(strSQL)
Do Until rs.EOF
If rs!ColumnHide Then
Frm("[" & rs!FieldsName & "]").ColumnHidden = True '隐藏用户列
End If
' For Each ctl In Frm.Controls
' If ctl.ControlType = acTextBox Then ' 确保控件为文本框
' If ctl.Name = rs!FieldsName Then ' 确保控件的名称与字段名称一致
' ctl.ColumnOrder = rs!FieldsColumnSN ' 赋值控件的顺序号
' ctl.ColumnWidth = rs!ColWidth ' 赋值控件的列宽
' End If
' End If
' Next ctl
Frm.Controls(rs!FieldsName).ColumnOrder = rs!FieldsColumnSN '如果窗体控件多,里面用for成了2倍太慢了,改为这两句
Frm.Controls(rs!FieldsName).ColumnWidth = rs!ColWidth
rs.MoveNext
Loop
DoCmd.SetWarnings True
Set cnn = Nothing
Set rst = Nothing
End Function