Это, наверное, очень простые вещи, но, пожалуйста, имейте в виду, что я совершенно новичок в этом.
Я работаю над процедурой для моих форм данных Access, которая будет:
- Отрегулируйте ширину каждого столбца в соответствии с содержимым
- Суммируйте общую ширину всех столбцов и вычтите ее из размера ширины окна
- Отрегулируйте ширину одного из столбцов в соответствии с оставшимся пространством
Это код, который регулирует ширину каждого столбца в соответствии с содержимым (что прекрасно работает):
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
Как мне написать код, чтобы получить общую ширину всех столбцов?
Большое спасибо!
Stefan
Решение
Это код, который делает таблицу доступа доступной из этого:
альтернативный текст 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