我有一个包含子表单的表单。此子表单显示动态创建的查询结果(用户输入条件,我构建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"
答案 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
答案 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
错误。
希望这会帮助别人!我知道这个关于一岁的问题,但这是谷歌在这个主题上找到的第一个结果。