VBA: как мне получить общую ширину всех элементов управления в форме MS-Access?

Это, вероятно, очень простые вещи, но, пожалуйста, имейте в виду, что я совершенно новичок в этих вещах.

Я работаю над процедурой для форм таблицы данных Access, которая будет:

  1. Отрегулируйте ширину каждого столбца в соответствии с содержимым
  2. Суммируйте общую ширину всех столбцов и вычтите ее из размера ширины окна.
  3. Отрегулируйте ширину одной из колонок, чтобы она соответствовала оставшемуся пространству.

Это код, который регулирует ширину каждого столбца в соответствии с содержимым (что работает нормально):

Dim Ctrl As Control
Dim Path As String
Dim ClmWidth As Integer

'Adjust column width to fit content
For Each Ctrl In Me.Controls
    If TypeOf Ctrl Is TextBox Then
        Path = Ctrl.Name
        Me(Path).ColumnWidth = -2
    End If
Next Ctrl

Как мне написать код, чтобы получить общую ширину всех столбцов?

Большое спасибо!

Стефан

Решение


Это код, который делает таблицу данных Access такой:

http://bayimg.com/image/galphaacp.jpg

К этому:

http://bayimg.com/image/galpnaacp.jpg

Sub AdjustColumnWidth(frm As Form, clm As String)

On Error GoTo HandleError

Dim intWindowWidth As Integer   ' Window width property
Dim ctrl As Control             ' Control
Dim intCtrlWidth As Integer     ' Control width property
Dim intCtrlSum As Integer       ' Control width property sum
Dim intCtrlAdj As Integer       ' Control width property remaining after substracted intCtrSum

'Adjust column width to standard width
For Each ctrl In frm.Controls
    If TypeOf ctrl Is TextBox Or TypeOf ctrl Is CheckBox Or TypeOf ctrl Is ComboBox Then
        Path = ctrl.Name
        frm(Path).ColumnWidth = 1500
    End If
Next ctrl

'Get total column width
For Each ctrl In frm.Controls
    If TypeOf ctrl Is TextBox Or TypeOf ctrl Is CheckBox Or TypeOf ctrl Is ComboBox Then
        Path = ctrl.Name
        intCtrlWidth = frm(Path).ColumnWidth
        If Path <> clm Then
            intCtrlSum = intCtrlSum + intCtrlWidth
        End If
    End If
Next ctrl

'Adjust column to fit window
intWindowWidth = frm.WindowWidth - 270
intCtrlAdj = intWindowWidth - intCtrlSum
frm.Width = intWindowWidth
frm(clm).ColumnWidth = intCtrlAdj

Debug.Print "Totalt (Ctrl): " & intCtrlSum
Debug.Print "Totalt (Window): " & intWindowWidth
Debug.Print "Totalt (Remaining): " & intCtrlAdj
Debug.Print "clm : " & clm

HandleError:
GeneralErrorHandler Err.Number, Err.Description
Exit Sub

End Sub

Код для вызова процедуры:

Private Sub Form_Load()

Call AdjustColumnWidth(Me, "txtDescription")

End Sub

person unitario    schedule 18.04.2010    source источник


Ответы (1)


Я бы просто просмотрел коллекцию элементов управления формами, как вы делали это раньше, и добавил ширину, сохранив ее в переменной. Вы даже можете добавить его в свой существующий цикл, чтобы не повторяться дважды, просто сделайте что-то вроде

sTotal_width=sTotal_width + Ctrl.Width
person Kevin Ross    schedule 19.04.2010
comment
Спасибо за это, имеет большой смысл! - person unitario; 19.04.2010