1

サブフォームを持つフォームがあります。このサブフォームは、動的に作成されたクエリの結果を表示します (ユーザーが条件を入力し、SQL を作成し、クエリ定義を更新して表示します)。問題は、列が動的であるため、列の幅がうまくいかず、一部がテキストを切り取っていることです。

プログラムで列をループする (またはループなしで同じことをする) 方法はありますか? クエリが更新された後、それらをすべて最適な幅に設定しますか?

編集:私のコードは次のようになります:

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"
4

3 に答える 3

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も参照してください。

于 2012-10-22T22:02:41.697 に答える
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

実行しようとしたクエリの半分でエラーが発生しました。この奇妙な、しかし単純な真実にたどり着きました。エイリアスを使用して構築された列 (つまり、すべての数式列と式) は、このエラーを発生させます。列が単純なデータ プルである場合は、正常に機能します。ただし、列が定式化された表示である場合....no columwidth propertyエラーが発生します。

うまくいけば、これは誰かを助けるでしょう! この質問は 1 年前から知っていますが、このトピックに関して Google が見つけた最初の結果でした。

于 2013-02-15T21:11:15.613 に答える
0

これで開いているフォームを取得し、そのフォーム内で選択したサブフォームを自動調整することができました。複数のフォーム/サブフォームがある場合は、関数の最後にあるコード行を使用して新しい名前で関数を呼び出し、それらをプログラムに貼り付けます。

Public Function AutoSizeSbCtrl(frmNameTar, sbCtrlNameTar)
For Each frm In Forms
    frmName = frm.Name
    If frmName = frmNameTar Then
        For Each frmCtrl In frm.Controls
            frmCtrlName = frmCtrl.Name
            If frmCtrlName = sbCtrlNameTar Then
                For Each sbfrmCtrl In frmCtrl.Controls
                    sbfrmCtrlName = sbfrmCtrl.Name
                    On Error Resume Next
                    sbfrmCtrl.ColumnWidth = -2
                    On Error GoTo 0
                Next sbfrmCtrl
            End If
        Next frmCtrl
    End If
Next frm

' paste the lines below in your code where you want it to trigger (i did on an update)
'frmNameTar= "frm12345" ' where frm12345 is the name of the form the subform is in
'sbCtrlNameTar="sbfrm67890" ' where sbfrm67890 is the name of the subform you are trying to autofit
'auSize = AutoSizeSbCtrl(frmNameTar, sbCtrlNameTar)
'end paste
End Function
于 2021-11-08T19:05:04.950 に答える