Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).
Введение
В этой статье описано, как управлять размером пользовательской формы в Microsoft Excel.
Дополнительные сведения
В Excel не поддерживается метод управления размером пользовательской формы с помощью кнопки развернуть или
Свернуть . Размер пользовательской формы можно контролировать тремя способами.
Способ 1: изменение размера пользовательской формы вручную
Чтобы вручную изменить размер пользовательской формы, выполните указанные ниже действия.
-
В пользовательской форме (UserForm1)захватите маркер изменения размера в правом нижнем углу.
-
Перетащите UserForm1 к нужному размеру.
Способ 2: изменение свойств пользовательской формы
Чтобы изменить свойства UserForm, выполните указанные ниже действия.
-
Щелкните UserForm.
-
В свойствах — UserForm1задайте высоту и ширину соответствующих значений.
Способ 3: указание размера пользовательской формы в макросе
Чтобы изменить размер пользовательской формы в макросе, выполните указанные ниже действия.
-
Щелкните правой кнопкой мыши свою UserFormи выберите команду Просмотреть код.
-
В макросе UserForm выполните одно из следующих действий:
Введите UserForm1. Height = число, где число — число от 0 до + 32 767. Более высокие значения могут также работать в зависимости от конфигурации системы.
Введите UserForm1. Width = Number, где число — число от 0 до + 32 767. Более высокие значения могут также работать в зависимости от конфигурации системы.
Нужна дополнительная помощь?
UserForm in Excel that can be resized by the user — they can click and drag the edges or corners of the form to change its size, just like with a regular window in the operating system.
Sections:
Make Form Resizable
Resize Event
Notes
Make Form Resizable
To do this, we need to place VBA code within a regular module and also within the Activate event for the UserForm.
Module Code
The below code goes into a regular module in the VBA window. (Alt + F11 to get to the VBA window and then Insert > Module.)
Private Declare Function GetForegroundWindow Lib "User32.dll" () As Long
Private Declare Function GetWindowLong _
Lib "User32.dll" Alias "GetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long) _
As Long
Private Declare Function SetWindowLong _
Lib "User32.dll" Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) _
As Long
Private Const WS_THICKFRAME As Long = &H40000
Private Const GWL_STYLE As Long = -16
Note: this code must go at the very top of the module before any other code!
The next section of code can be placed anywhere within the module.
Public Sub FormResizable()
Dim lStyle As Long
Dim hWnd As Long
Dim RetVal
hWnd = GetForegroundWindow
lStyle = GetWindowLong(hWnd, GWL_STYLE) Or WS_THICKFRAME
RetVal = SetWindowLong(hWnd, GWL_STYLE, lStyle)
End Sub
UserForm Code
Code must also be placed within the UserForm itself in order to work.
All you need to do is call FormResizable from the Activate event for the UserForm.
FormResizable
When you put the code into the Activate event for the UserForm, it will look like this:
Private Sub UserForm_Activate()
FormResizable
End Sub
If you already have code in the Activate event, just place FormResizable at the top of this section.
To learn more about events and how to use them, view our tutoral on UserForm Events.
Resize Event
Resizing a form without chaning anything within the form window is usually useless, as such, you can put code inside of the UserForm_Resize event that will adjust the properties of the controls in the form when the user resizes it, such as increasing the size of buttons or labels within the form when a user makes the form larger.
Notes
When a form is resized by the user, using the above code, once the form has been closed and opened again, it will default back to the original size.
Make sure to download the sample file to see this example in Excel.
Similar Content on TeachExcel
UserForm Events
Tutorial: Explanation of UserForm Events in Excel. This includes what they are, how to use them, and…
UserForm Controls
Tutorial: This tutorial gives you an overview of what a UserForm Control is and how to add them to y…
Scrollable UserForm
Tutorial: How to make a scrollable UserForm. This allows you to put scroll bars onto a form so that …
How to Resize Rows and Columns in Excel Quickly
Tutorial: Resizing rows and columns in Excel is an easy process. Simply left click in between the co…
Prevent Images and Shapes from Resizing or Moving in Excel
Tutorial:
How to stop Images and Shapes from resizing in Excel when you change the size of rows and…
Quickly Resize Multiple Columns or Rows at Once in Excel
Tutorial:
How to quickly resize multiple columns and rows at once in Excel. This avoids having to…
Subscribe for Weekly Tutorials
BONUS: subscribe now to download our Top Tutorials Ebook!
Как автоматически изменить размер формы на основе / в зависимости от указанного значения ячейки в Excel?
Если вы хотите автоматически изменять размер фигуры на основе значения указанной ячейки, эта статья может вам помочь.
Автоматическое изменение размера формы на основе указанного значения ячейки с кодом VBA
Автоматическое изменение размера формы на основе указанного значения ячейки с кодом VBA
Следующий код VBA может помочь вам изменить определенный размер фигуры на основе указанного значения ячейки в текущем листе. Пожалуйста, сделайте следующее.
1. Щелкните правой кнопкой мыши вкладку листа с фигурой, размер которой нужно изменить, а затем щелкните Просмотреть код из контекстного меню.
2. в Microsoft Visual Basic для приложений окна, скопируйте и вставьте следующий код VBA в окно кода.
Код VBA: автоматическое изменение размера формы на основе указанного значения ячейки в Excel
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Row = 2 And Target.Column = 1 Then
Call SizeCircle("Oval 2", Val(Target.Value))
End If
End Sub
Sub SizeCircle(Name As String, Diameter)
Dim xCenterX As Single
Dim xCenterY As Single
Dim xCircle As Shape
Dim xDiameter As Single
On Error GoTo ExitSub
xDiameter = Diameter
If xDiameter > 10 Then xDiameter = 10
If xDiameter < 1 Then xDiameter = 1
Set xCircle = ActiveSheet.Shapes(Name)
With xCircle
xCenterX = .Left + (.Width / 2)
xCenterY = .Top + (.Height / 2)
.Width = Application.CentimetersToPoints(xDiameter)
.Height = Application.CentimetersToPoints(xDiameter)
.Left = xCenterX - (.Width / 2)
.Top = xCenterY - (.Height / 2)
End With
ExitSub:
End Sub
Внимание: В коде «Овал 2»- это имя формы, размер которой вы измените. И Ряд = 2, Столбец = 1 означает, что размер формы «Овал 2» будет изменен на значение в A2. Пожалуйста, измените их по своему усмотрению.
Для автоматического изменения размера нескольких фигур на основе разных значений ячеек примените приведенный ниже код VBA.
Код VBA: автоматическое изменение размера нескольких фигур на основе значения разных указанных ячеек в Excel
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xAddress As String
On Error Resume Next
If Target.CountLarge = 1 Then
xAddress = Target.Address(0, 0)
If xAddress = "A1" Then
Call SizeCircle("Oval 1", Val(Target.Value))
ElseIf xAddress = "A2" Then
Call SizeCircle("Smiley Face 3", Val(Target.Value))
ElseIf xAddress = "A3" Then
Call SizeCircle("Heart 2", Val(Target.Value))
End If
End If
End Sub
Sub SizeCircle(Name As String, Diameter)
Dim xCenterX As Single
Dim xCenterY As Single
Dim xCircle As Shape
Dim xDiameter As Single
On Error GoTo ExitSub
xDiameter = Diameter
If xDiameter > 10 Then xDiameter = 10
If xDiameter < 1 Then xDiameter = 1
Set xCircle = ActiveSheet.Shapes(Name)
With xCircle
xCenterX = .Left + (.Width / 2)
xCenterY = .Top + (.Height / 2)
.Width = Application.CentimetersToPoints(xDiameter)
.Height = Application.CentimetersToPoints(xDiameter)
.Left = xCenterX - (.Width / 2)
.Top = xCenterY - (.Height / 2)
End With
ExitSub:
End Sub
Ноты:
1) В коде «Овал 1«,»Смайлик 3(Основной ключ) и Сердце 3»- это названия фигур, вы автоматически измените их размеры. И A1, A2 иA3 — это ячейки, значения которых вы будете автоматически изменять размер фигур.
2) Если вы хотите добавить больше фигур, добавьте линии «ElseIf xAddress = «A3» Тогда» а также «Call SizeCircle (» Heart 2 «, Val (Target.Value))«выше первого»End If«в коде. И измените адрес ячейки и имя формы в соответствии с вашими потребностями.
3. Нажмите другой + Q клавиши одновременно, чтобы закрыть Microsoft Visual Basic для приложений окно.
С этого момента, когда вы меняете значение в ячейке A2, размер овала 2 формы будет изменен автоматически. Смотрите скриншот:
Или измените значения в ячейках A1, A2 и A3, чтобы автоматически изменить размеры соответствующих форм «Овал 1», «Смайлик 3» и «Сердце 3». Смотрите скриншот:
Внимание: Размер фигуры больше не будет изменяться, если значение ячейки больше 10.
Статьи по теме:
- Как добавить указатель мыши к определенной форме в Excel?
- Как заполнить фигуру прозрачным цветом фона в Excel?
- Как скрыть или показать определенную фигуру на основе указанного значения ячейки в Excel?
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
0 / 0 / 0 Регистрация: 22.12.2011 Сообщений: 27 |
|
1 |
|
22.12.2011, 14:55. Показов 13941. Ответов 19
В VB у Form есть свойство BorderStyle, которому можно присвоить значение Sizebale, а в VBA такому же свойству объекта UserForm можно присвоить только BorderStyleNone или BorderStyleSignle. Кроме этого, хотелось бы сделать окно без заголовка. Возможно ли?
0 |
1 / 1 / 1 Регистрация: 10.04.2011 Сообщений: 415 |
|
22.12.2011, 15:04 |
2 |
размеры формы меняются установкой требуемой ширины и высоты.
0 |
0 / 0 / 0 Регистрация: 22.12.2011 Сообщений: 27 |
|
22.12.2011, 16:44 [ТС] |
3 |
Нужно чтобы пользователь мог менять размеры окна.
0 |
1 / 1 / 1 Регистрация: 10.04.2011 Сообщений: 415 |
|
22.12.2011, 17:11 |
4 |
Драг-дропом? Боюсь, не прокатит. А где ты видел диалоговое окно с такими возможностями — там же элементы управления. Как вариант — сделай 4 кнопочки примерно так: http://www.mfco.ru/resform.zip
0 |
0 / 0 / 0 Регистрация: 22.12.2011 Сообщений: 27 |
|
22.12.2011, 17:32 [ТС] |
5 |
> А где ты видел диалоговое окно с такими возможностями
0 |
90 / 37 / 14 Регистрация: 03.11.2010 Сообщений: 429 |
|
22.12.2011, 19:58 |
6 |
Драг-дропом?-Можно сделать имитацию:
0 |
2 / 2 / 0 Регистрация: 23.04.2011 Сообщений: 159 |
|
27.12.2011, 14:42 |
7 |
Через API:
0 |
1 / 1 / 1 Регистрация: 10.04.2011 Сообщений: 415 |
|
27.12.2011, 15:42 |
8 |
Как ты файл прикрепляешь, поделись?
0 |
2 / 2 / 0 Регистрация: 23.04.2011 Сообщений: 159 |
|
27.12.2011, 16:37 |
9 |
Шутите или в серьезно?
0 |
2 / 2 / 0 Регистрация: 23.04.2011 Сообщений: 159 |
|
27.12.2011, 16:42 |
10 |
Sorry, в предыдущем ответе “В” опустить
0 |
0 / 0 / 0 Регистрация: 22.12.2011 Сообщений: 27 |
|
27.12.2011, 17:05 [ТС] |
11 |
Через API: Отлично! Именно то, что нужно. Просто я мало с API имел дело и сам не нашел бы нужных функций. Спасибо огромное!
0 |
1 / 1 / 1 Регистрация: 10.04.2011 Сообщений: 415 |
|
27.12.2011, 17:28 |
12 |
Шутите или серьезно? Конечно серьезно — нафига мне класть файлы на свой сервер, а потом ссылку давать? А указание на файл на локальном диске дает ошибку «только txt, zip, rar, gif, jpg, png», хотя ему даю rar-архив
0 |
2 / 2 / 0 Регистрация: 23.04.2011 Сообщений: 159 |
|
27.12.2011, 18:31 |
13 |
To Johny Walker: После известных изменении на форуме, когда я нажимаю на “Ответить” прямо попадаю в редактор новых сообщении, где наверху находится “Прикрепить файл”.
0 |
Alex77 |
||||
28.12.2011, 10:39 |
14 |
|||
Нужно чтобы пользователь мог менять размеры окна. А может вот так подойдёт:
При нажатии над формой (в данном случае левой, для правой «If Button = 2»), и удерживая кнопку двигать мышу — меняется размер формы. Безо всяких АПИ |
0 / 0 / 0 Регистрация: 22.12.2011 Сообщений: 27 |
|
29.12.2011, 12:47 [ТС] |
15 |
А может вот так подойдёт: Спасибо за идею! Только это я использую для изменения позиции окна. А изменяемые размеры и прочие своства лучше через API.
0 |
Alex77 |
|
03.01.2012, 08:26 |
16 |
Через API: Третий раз скачиваю, пробую. |
0 / 0 / 0 Регистрация: 22.12.2011 Сообщений: 27 |
|
03.01.2012, 13:06 [ТС] |
17 |
Через API: Третий раз скачиваю, пробую. Смотри аттач.
0 |
Alex77 |
|
03.01.2012, 15:26 |
18 |
Через API: Третий раз скачиваю, пробую. Смотри аттач. Собственно хоть скажите, что должно было происходить. |
0 / 0 / 0 Регистрация: 22.12.2011 Сообщений: 27 |
|
03.01.2012, 15:49 [ТС] |
19 |
Если отмечено WS_THICKFRAME, окно будет менять размеры, как обычно в Windows (перетаскиванием за рамку).
0 |
Alex77 |
|
04.01.2012, 21:53 |
20 |
Спасибо, разобрался. |
dtrey Пользователь Сообщений: 16 |
Доброго времени суток. |
Kuzmich Пользователь Сообщений: 7998 |
#2 21.05.2014 22:13:01
|
||
anvg Пользователь Сообщений: 11878 Excel 2016, 365 |
Доброе время суток. Может всё-таки освоить поиск Не зависимо от размера монитора и установленного разрешения, вывести форму на весь экран можно так ? Изменено: anvg — 22.05.2014 06:19:53 |
dtrey Пользователь Сообщений: 16 |
#4 22.05.2014 09:41:38 Нашел вот такой код :
работает на ура. |
||
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
dtrey, во-первых, здравствуйте , во-вторых код в тэгах должен быть, в-третьих, одна тема — один вопрос. Изучайте и применяйте правила форума. Они лёгкие. <#0> |
Johny Пользователь Сообщений: 2737 |
Выберите в свойствах формы: StartUpPosition => 2 — CenterScreen. There is no knowledge that is not power |
anvg Пользователь Сообщений: 11878 Excel 2016, 365 |
#7 22.05.2014 11:00:44
А если Excel не на весь экран? Или у ТС задача закрыть своей формой Excel? |
||||
vikttur Пользователь Сообщений: 47199 |
StartUpPosition задает позицию. Если форма растянута на весь экран, то она и так по центру. Кто объяснит по коду Кузьмича. |
anvg Пользователь Сообщений: 11878 Excel 2016, 365 |
#9 22.05.2014 11:07:47
Вот и вся разница. |
||||
vikttur Пользователь Сообщений: 47199 |
Окно Excel на весь экран, форма не хочет. |
Johny Пользователь Сообщений: 2737 |
#11 22.05.2014 11:10:12
А если завтра дождь пойдёт? There is no knowledge that is not power |
||||
anvg Пользователь Сообщений: 11878 Excel 2016, 365 |
#12 22.05.2014 11:14:39
Так и надо же к Excel и привязываться
Тогда вставить изменение размера формы в событие UserForm_Layout |
||||||
vikttur Пользователь Сообщений: 47199 |
#13 22.05.2014 11:17:41
Это ясно.
Почему не растягивается на все окно? Все-таки влияние размера монитора? Если бы это, то должно быть наоборот — полный разворот по вертикали. |
||||
anvg Пользователь Сообщений: 11878 Excel 2016, 365 |
Окно листа книги же не занимает весь экран? Вот и форма то же. |
vikttur Пользователь Сообщений: 47199 |
Окно-то активное — не на весь экран! |
dtrey Пользователь Сообщений: 16 |
#16 22.05.2014 11:50:17
не помогает( |
||
vikttur Пользователь Сообщений: 47199 |
#17 22.05.2014 11:56:15 Сообщение №8 читали? И не поможет. Элементы формы просто так не переместятся. |