Перейти к содержимому

VBA Excel. Размеры и расположение элементов управления

Определение размеров и расположения существующих элементов управления на пользовательской форме с помощью кода VBA Excel и сохранение их в текстовый файл.

  1. Описание возможной проблемы
  2. Исходный код для решения
  3. Пример сгенерированного кода

Описание возможной проблемы

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

Если вы программируете на VBA Excel по заказу, то необходимо, чтобы у всех ваших клиентов пользовательская форма всегда открывалась корректно, независимо от операционной системы и версии приложения.

Этого можно достичь, задавая размеры и расположение элементов управления и размеры самой пользовательской формы при ее загрузке. Но вручную писать код VBA с установкой размеров и расположения хотя и не сложно, но достаточно трудоемко.

Исходный код для решения

Вместо ручной работы, можно использовать следующий код VBA Excel, который считывает размеры и расположение элементов управления с указанной формы и записывает результаты в текстовый файл RazmeshcheniyeElementov.txt:

'Копирование расположения и размеров элементов
'управления пользовательской формы
Sub RazmeshcheniyeElementovUpravleniya()
On Error GoTo Instr
Dim myControl As Control, myForm As String, myKod As String
myForm = "UserForm1"
With UserForms.Add(myForm)
myKod = "With " & .Name & vbNewLine & _
Space(4) & ".Height = " & .Height & vbNewLine & _
Space(4) & ".Width = " & .Width & vbNewLine
End With
For Each myControl In UserForms.Add(myForm).Controls
With myControl
myKod = myKod & Space(3) & "With ." & .Name & _
vbNewLine & Space(8) & ".Height = " & .Height & _
vbNewLine & Space(8) & ".Width = " & .Width & _
vbNewLine & Space(8) & ".Top = " & .Top & _
vbNewLine & Space(8) & ".Left = " & .Left & _
vbNewLine & Space(4) & "End With" & vbNewLine
End With
Next
Set myControl = Nothing
myKod = myKod & "End With"
'Записываем результаты в текстовый файл
Dim fso As Object, myFile As Object, ws As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set myFile = fso.CreateTextFile(ThisWorkbook.Path & _
"\RazmeshcheniyeElementov.txt")
myFile.WriteLine myKod
myFile.Close
'Открываем текстовый файл с записанным кодом
Set ws = CreateObject("WScript.Shell")
ws.Run ThisWorkbook.Path & "\RazmeshcheniyeElementov.txt"
Set ws = Nothing
Set fso = Nothing
Set myFile = Nothing
Exit Sub
Instr:
If Err.Description <> "" Then
MsgBox "Произошла ошибка: " & Err.Description
End If
End Sub

Для реализации программы необходимо представленный выше код вставить в стандартный модуль книги Excel с обрабатываемой формой. В строке myForm = "UserForm1" следует заменить UserForm1 на имя нужной пользовательской формы, и можно запускать код на выполнение непосредственно из редактора VBA.

Текстовый файл с записанным кодом будет сохранен в ту же папку, где расположена книга с обрабатываемой формой. Сгенерированный код VBA сразу готов к вставке в процедуру UserForm_Initialize().

Вы можете самостоятельно добавить в мой код тип и размер шрифта, если посчитаете необходимым.

Пример сгенерированного кода

Исходный код определения размеров и расположения элементов управления был запущен для формы UserForm1 с двумя надписями и с одним экземпляром текстового поля, комбинированного списка и кнопки.

В результате был сгенерирован следующий код VBA Excel:

With UserForm1
    .Height = 168
    .Width = 294,75
   With .Label1
        .Height = 24
        .Width = 84
        .Top = 12
        .Left = 18
    End With
   With .Label2
        .Height = 24
        .Width = 84
        .Top = 54
        .Left = 18
    End With
   With .TextBox1
        .Height = 25,5
        .Width = 156
        .Top = 12
        .Left = 114
    End With
   With .ComboBox1
        .Height = 25,5
        .Width = 156
        .Top = 54
        .Left = 114
    End With
   With .CommandButton1
        .Height = 24
        .Width = 72
        .Top = 102
        .Left = 102
    End With
End With

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

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

Добавить комментарий

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора. При добавлении в комментарий кода VBA Excel, вставьте перед его началом тег [vb] и по окончании кода - [/vb].