访问子表单,如何调整列的大小以适应?

时间:2012-10-22 21:58:24

标签: vba ms-access access-vba

我有一个包含子表单的表单。此子表单显示动态创建的查询结果(用户输入条件,我构建SQL,然后更新querydef并显示)。问题是因为列是动态的,列的宽度不正常,有些正在切断文本。

有没有办法以编程方式循环遍历列(或者在没有循环的情况下执行相同的操作)并在刷新查询后将它们全部设置为最佳匹配宽度?

编辑:这是我的代码现在的样子:

CurrentDb.QueryDefs("SearchResults").sql = sql
CurrentDb.QueryDefs.Refresh   

Dim qdf1 As DAO.QueryDef
Dim fld1 As DAO.Field

Set qdf1 = CurrentDb.QueryDefs("SearchResults")

For i = 0 To qdf1.Fields.Count - 1
    Set fld1 = qdf1.Fields(i)
    fld1.CreateProperty "ColumnWidth", dbInteger

    fld1.Properties("ColumnWidth") = -2     'Throws error
    Set fld1 = Nothing
Next i

Me.Child20.SourceObject = "Query.SearchResults"

2 个答案:

答案 0 :(得分:4)

您可以像这样设置列宽:

Sub SetColumnWidth()
Dim qdf1 As DAO.QueryDef
Dim fld1 As DAO.Field

Set qdf1 = CurrentDb.QueryDefs("query3")

For i = 0 To qdf1.Fields.Count - 1
    Set fld1 = qdf1.Fields(i)
    fld1.CreateProperty "ColumnWidth", dbInteger
    'very narrow indeed
    'fld1.Properties("ColumnWidth") = 200
    'Or -2 : Sizes the column to fit the visible text
    'but it is not quite as useful as it would seem
    fld1.Properties("ColumnWidth") = -2
    Set fld1 = Nothing
Next i

End Sub

另见http://support.microsoft.com/kb/210427

答案 1 :(得分:1)

所以我刚才遇到了同样的问题。我有幸有一半的查询工作而另一半没有。我一直在使用这段代码:

Sub QueryData(strSQL As String)
    Dim qryData As DAO.QueryDef
    Dim intcount As Integer

    Set qryData = CurrentDb.QueryDefs("DataQuery")
    qryData.SQL = strSQL
    qryData.CreateProperty "ColumnWidth", dbInteger

    qryData.Fields(0).Properties("ColumnWidth") = 5760

    DoCmd.OpenQuery "DataQuery", , acReadOnly
End Sub

在我尝试使用它运行的一半查询中生成了错误。我追溯到这个奇怪但简单的事实:使用Alias构建的列(即所有公式列和表达式)都会出现此错误。如果列只是一个直接数据拉,它工作正常。但是,如果该列是一个公式显示....它会吐出no columwidth property错误。

希望这会帮助别人!我知道这个关于一岁的问题,但这是谷歌在这个主题上找到的第一个结果。