Vba excel userform свернуть

3 / 3 / 0

Регистрация: 17.11.2014

Сообщений: 118

1

Как сделать кнопку «Свернуть» рядом с крестиком?

24.11.2014, 16:01. Показов 9469. Ответов 11


Студворк — интернет-сервис помощи студентам

Vba макрос создаю USerForm , в вверху правом углу есть крестик , что бы закрыт форму, а как туда добавить сворачивание ? Что бы форма сворачивалась вместе с активной книгой в которой идут изменения ?



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

24.11.2014, 16:01

Ответы с готовыми решениями:

Как сделать, чтобы kod= «=Find(«»,»», R2C1, 1)»
Как следующий код

Cells(1, 9).Select
ActiveCell.FormulaR1C1 = ‘=Find(»,», R2C1, 1)’
kod =…

Как «нажать» на кнопку поиск в «яндекс»
Добрый день,

Помогите, пожалуйста: стоит задача научиться переходить с интернет закладки по…

Как сделать, чтобы, когда нажимается кнопка «ОК» данные из combobox1 и combobox2 Печатались на «Лист1»
Как сделать, чтобы, когда нажимается кнопка "ОК" данные из combobox1 и combobox2 Печатались на…

Как сделать так, чтобы макрос удалял данные из строки, начиная со столбца «p» и заканчивая столбцом «y»?
Здравствуйте, как сделать так, чтобы макрос удалял данные из строки, начиная со столбца "p" и,…

11

Аксима

6076 / 1320 / 195

Регистрация: 12.12.2012

Сообщений: 1,023

24.11.2014, 18:12

2

Здравствуйте, Fiot,

Например, можно поступить так:

  1. Нарисовать под крестиком обычную кнопку (CommandButton).
  2. Присвоить ей текст вроде «_» или «Свернуть».
  3. В обработчике нажатия на кнопку написать следующий код:
    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    #If VBA7 Then
        Private Declare PtrSafe Function ShowWindow Lib "User32.dll" (ByVal hWnd As LongPtr, ByVal nCmdShow As Long) As Boolean
    #Else
        Private Declare Function ShowWindow Lib "User32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Boolean
    #End If
     
    Private Sub CommandButton1_Click()
        ShowWindow Application.hWnd, 6
    End Sub

С уважением,

Аксима



1



3 / 3 / 0

Регистрация: 17.11.2014

Сообщений: 118

25.11.2014, 00:13

 [ТС]

3

Не получается, выдает ошибку….
Можно посмотреть пример?



0



Апострофф

Заблокирован

25.11.2014, 07:48

4

Лучший ответ Сообщение было отмечено Fiot как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Const GWL_STYLE As Long = (-16)
Const WS_SYSMENU As Long = &H80000
Const WS_MINIMIZEBOX As Long = &H20000
Const WS_MAXIMIZEBOX As Long = &H10000
Const SW_SHOWMAXIMIZED As Long = 3
Const SW_SHOWMINIMIZED As Long = 2
Const SW_SHOWNORMAL As Long = 1
 
Private Sub UserForm_Activate()
'добавляет на форму значки минимизировать форму и значок развернуть окно на полный экран
Dim lngFrmHndl As Long
Dim lngStyle As Long
    lngFrmHndl = FindWindow(vbNullString, Me.Caption)
    lngStyle = GetWindowLong(lngFrmHndl, GWL_STYLE) Or WS_SYSMENU Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
    SetWindowLong lngFrmHndl, GWL_STYLE, (lngStyle)
    DrawMenuBar lngFrmHndl
End Sub

Правда, как быть с VBA7 — не знаю



1



Fiot

3 / 3 / 0

Регистрация: 17.11.2014

Сообщений: 118

25.11.2014, 09:31

 [ТС]

5

Куда вот это вставить ?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Const GWL_STYLE As Long = (-16)
Const WS_SYSMENU As Long = &H80000
Const WS_MINIMIZEBOX As Long = &H20000
Const WS_MAXIMIZEBOX As Long = &H10000
Const SW_SHOWMAXIMIZED As Long = 3
Const SW_SHOWMINIMIZED As Long = 2
Const SW_SHOWNORMAL As Long = 1

Это все идет без программы sub ….. я не совсем понимаю



0



Апострофф

Заблокирован

25.11.2014, 09:33

6

Цитата
Сообщение от Fiot
Посмотреть сообщение

Куда вот это вставить ?

В самый верх модуля формы.



1



Fiot

3 / 3 / 0

Регистрация: 17.11.2014

Сообщений: 118

25.11.2014, 10:22

 [ТС]

7

ААА все разобрался ))) Спасибо ) и он добавил , это то что надо было ) спасибо ))

Добавлено через 42 минуты
А можно ли этот скрипт привязать к активной странице в которой идут изменения, что бы он сворачивал и форму и саму книгу?
или я так понимаю это как то делается через vba7 ??

Добавлено через 3 минуты
Хотя сделав просто вот это код, он начал сворачивать

Visual Basic
1
2
3
Private Sub CommandButton1_Click()
    ShowWindow Application.hWnd, 6
End Sub

Добавлено через 3 минуты
Совместив его конечно с этим скриптом

Visual Basic
1
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long



0



1261 / 147 / 32

Регистрация: 11.02.2011

Сообщений: 418

25.11.2014, 16:36

8

Лучший ответ Сообщение было отмечено Fiot как решение

Решение

В своё время отыскал очень простой и вкусный класс на эту тему. Вот пример.



0



3 / 3 / 0

Регистрация: 17.11.2014

Сообщений: 118

25.11.2014, 16:49

 [ТС]

9

Да , но там нужно еще какой то стиль формы прописывать полностью ?
так как сама программа в userform не работает , если только заданы все скрипты в Стиле, я правильно понял ?



0



korvindeson

1261 / 147 / 32

Регистрация: 11.02.2011

Сообщений: 418

25.11.2014, 17:58

10

Не понял вопрос. Класс CFormChanger подгружаем, на этапе инициализации формы встявляем код, удаляя не нужные опции.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub UserForm_Initialize()
    Set mclsFormChanger = New CFormChanger
    'можно менять размер
    mclsFormChanger.Sizeable = True
    'показать кнопку максимизировать
    mclsFormChanger.ShowMaximizeBtn = True
    'показать кнопку мимимизировать
    mclsFormChanger.ShowMinimizeBtn = True
    'показать заголовок
    mclsFormChanger.ShowCaption = True
    'показать кнопку закрыть
    mclsFormChanger.ShowCloseBtn = True
    'показать иконку
    mclsFormChanger.ShowTaskBarIcon = True
    Set mclsFormChanger.Form = Me
End Sub

Только если разрешаете ресайз, надо ещё прописывать изменение положения элементов в форме, в зависимости от размеров.



1



3 / 3 / 0

Регистрация: 17.11.2014

Сообщений: 118

25.11.2014, 18:43

 [ТС]

11

Как пристально подгрузить cformchanger ?? Просто прим создание формы идет только модуль …



0



2784 / 716 / 106

Регистрация: 04.02.2011

Сообщений: 1,443

26.11.2014, 07:06

12

Цитата
Сообщение от Fiot
Посмотреть сообщение

Как пристально подгрузить cformchanger ??

Экспортировать одноименный модуль класса из примера в файл с расширением .cls, а затем импортировать его в свой проект. Делается через нажатие ПКМ в дереве проекта (Project Explorer).



1



 

Ilya_NSK

Пользователь

Сообщений: 25
Регистрация: 01.01.1970

#2

01.12.2008 08:58:44

для сворачивания формы (если конечно не отменено в ее свойствах) есть стандартная кнопка в заголовке окна. Модально открытую форму свертывать смысла нет. Для немодальных форм можно создать кнопку с действием me.hide, но на другой форме, доступной в этот момент, должна быть кнопка с    
userform(та, что спрятана).show  
может что и упустил… уважаемое сообщество добавит — поправит

Как свернуть пользовательскую форму?

flash708

Дата: Понедельник, 29.12.2014, 11:08 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

Всех с наступающим праздником)
Прошу подсказать как с помощью макросов в VBA сделать так, чтобы в пользовательской форме появилась возможность свернуть (свернуть форму, оставить значок на панели задач). я находил в интернете решение задачи для Excel 97 (не привожу ссылку чтобы не сочли за рекламу), привожу сами строчки:

[vba]

Код

Private Declare Function FindWindow _
Lib «user32.dll» Alias «FindWindowA» ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow _
Lib «user32.dll» ( _
ByVal hWnd As Long, _
ByVal nCmdShow As Long) 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 Sub UserForm_Show()
Dim ihWnd As Long, iStyle As Long

ihWnd = FindWindow(vbNullString, U#serForm1.Caption)

iStyle = GetWindowLong(ihWnd, -16&)
SetWindowLong ihWnd, -16&, iStyle Or &H20000
iStyle = GetWindowLong(ihWnd, -20&)
SetWindowLong ihWnd, -20&, iStyle Or &H40000

ShowWindow ihWnd, 5&
End Sub

[/vba]

но это не работает для более поздних версий Excel (отображается форма без кнопки свернуть)
Спасибо)

[moder]Кнопка # есть на панели инструментов в форме, где Вы пишете сообщение. Исправила. А значки # на досуге поубираете[/moder]
[ответ модеру] Спасибо большое! С наступающим! [/ответ модеру]

Сообщение отредактировал flash708Понедельник, 29.12.2014, 13:22

 

Ответить

RAN

Дата: Понедельник, 29.12.2014, 11:15 |
Сообщение № 2

Группа: Друзья

Ранг: Экселист

Сообщений: 5645


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RANПонедельник, 29.12.2014, 14:34

 

Ответить

RAN

Дата: Понедельник, 29.12.2014, 14:35 |
Сообщение № 3

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Вернул ответ


Быть или не быть, вот в чем загвоздка!

 

Ответить

flash708

Дата: Понедельник, 29.12.2014, 15:50 |
Сообщение № 4

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

Спасибо за ссылку но к сожалению не получилось (выводится сообщение Compile Error) Если не трудно, не могли бы вы привести листинг конкретной программы, добавляющей кнопку Свернуть

 

Ответить

DJ_Marker_MC

Дата: Понедельник, 29.12.2014, 16:15 |
Сообщение № 5

Группа: Друзья

Ранг: Ветеран

Сообщений: 991


Репутация:

213

±

Замечаний:
0% ±


Excel 2019

flash708, Добрый день. Вам нужно чтоб у формы была кнопка свернуть?
Так?

К сообщению приложен файл:

0797119.xlsm
(32.5 Kb)

 

Ответить

Leanna

Дата: Понедельник, 29.12.2014, 17:08 |
Сообщение № 6

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 189


Репутация:

78

±

Замечаний:
0% ±


excel 2010

Как альтернатива, если не получится, можно запустить окно в режиме UserForm1.Show vbModeless, тогда у вас несмотря на открытую форму будет доступ к ячейкам.


Лучше день потерять, потом за пять минут долететь!

 

Ответить

flash708

Дата: Понедельник, 29.12.2014, 20:51 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 37


Репутация:

0

±

Замечаний:
20% ±


Excel 2010

спасибо, свернуть/развернуть получилось) но почему-то крестик (закрыть) перестал работать. может добавить простую кнопку с процедурой типа Unload me? хотя если добавите функционирование на крестик (закрыть) то было бы еще интересней) заранее спасибо.

 

Ответить

RAN

Дата: Понедельник, 29.12.2014, 21:04 |
Сообщение № 8

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

если добавите функционирование на крестик

Может проще отключить добавленный функционал игнорировыния нежатия крестика?
[vba]

Код

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
‘ If CloseMode = 0 Then Cancel = 1
  End Sub

[/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

Лиза

Дата: Суббота, 27.01.2018, 15:11 |
Сообщение № 9

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

DJ_Marker_MC, Здравствуйте, интересует такой вопрос, какая строка в коде отвечает за ширину формы. При свернутой форме не видно название формы.

 

Ответить

Еще раз всем здравствуйте.
Можно ли добавить в caption юзерформы кнопку для сворачивания (минимизирования окна), чтобы форма не мешала работать с листом эксель?


По ссылке есть отличный примерчик, только у формы надо выставить свойство ShowModal в False и в процедуре UserForm_Activate изменить строчку:

cbModal.Value = False 'было True

Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли


  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

  • Как свернуть UserForm?

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Популярные разделы FAQ:    user posted image Общие вопросы    user posted image Особенности VBA-кода    user posted image Оптимизация VBA-кода    user posted image Полезные ссылки


    1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
    2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
    3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
    4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.

    >
    Как у формы сделать кнопку СВЕРТЫВАНИЯ формы

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    20.02.08, 08:30

      ясно. А как у формы сделать кнопку СВЕРТЫВАНИЯ формы

      а то кнопка для этого мне не подходит :(

      ExpandedWrap disabled

        Private Sub CommandButton1_Click()

        If fMin Then

          Me.Height = 361.5

          fMin = 0

         Else

          Me.Height = 44

          fMin = 1

         End If

        End Sub

      Эта тема была разделена из темы «Проверка типа ячейки перед помещением ее в контрол»


      Krasnaja Shapka



      Сообщ.
      #2

      ,
      20.02.08, 08:43

        Full Member

        ***

        Рейтинг (т): 18

        скрыть форму:

        ExpandedWrap disabled

          Me.Hide’

        закрыть форму

        ExpandedWrap disabled

          UnLoad Me

        это если в коде формы конечно…

        Сообщение отредактировано: Krasnaja Shapka — 20.02.08, 08:45


        НарКот



        Сообщ.
        #3

        ,
        20.02.08, 09:57

          Krasnaja Shapka, мне нужна в загаловке формы кнопочка СВЕРНУТЬ
          неужели у форм ВБА это не предусмотрено?

          Сообщения были разделены в тему «Как у формы сделать кнопку СВЕРТЫВАНИЯ формы»

          Это сообщение было перенесено сюда или объединено из темы «Проверка типа ячейки перед помещением ее в контрол»


          Krasnaja Shapka



          Сообщ.
          #4

          ,
          20.02.08, 10:43

            Full Member

            ***

            Рейтинг (т): 18

            это другое дело… к чему тогда цитирование кода? поройся на форуме… тут проскакивал подробнейший пример управления формой…


            bi-lya



            Сообщ.
            #5

            ,
            20.02.08, 11:21

              Senior Member

              ****

              Рейтинг (т): 34


              НарКот



              Сообщ.
              #6

              ,
              20.02.08, 16:14

                Цитата bi-lya @ 20.02.08, 11:21

                Посмотрите здесь

                что-то никак не загружу оттуда :(

                можешь здесь написать о чем там?


                Pavel55



                Сообщ.
                #7

                ,
                20.02.08, 17:47

                  Junior

                  *

                  Рейтинг (т): 12

                  Добавь в модуль формы

                  ExpandedWrap disabled

                    Private Declare Function FindWindow Lib «user32» Alias «FindWindowA» (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

                    Private Declare Function GetWindowLong Lib «user32» Alias «GetWindowLongA» (ByVal hwnd As Long, ByVal nIndex As Long) As Long

                    Private Declare Function SetWindowLong Lib «user32» Alias «SetWindowLongA» (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

                    Private Declare Function DrawMenuBar Lib «user32» (ByVal hwnd As Long) As Long

                    Private Const GWL_STYLE As Long = (-16)

                    Private Const WS_SYSMENU As Long = &H80000

                    Private Const WS_MINIMIZEBOX As Long = &H20000

                    Private Const WS_MAXIMIZEBOX As Long = &H10000

                    Private Sub UserForm_Activate()

                        Dim lngFrmHndl As Long

                        Dim lngStyle As Long

                        lngFrmHndl = FindWindow(vbNullString, Me.Caption)

                        lngStyle = GetWindowLong(lngFrmHndl, GWL_STYLE)

                        lngStyle = lngStyle Or WS_SYSMENU

                        lngStyle = lngStyle Or WS_MINIMIZEBOX

                        lngStyle = lngStyle Or WS_MAXIMIZEBOX

                        SetWindowLong lngFrmHndl, GWL_STYLE, (lngStyle)

                        DrawMenuBar lngFrmHndl

                    End Sub


                  bi-lya



                  Сообщ.
                  #8

                  ,
                  21.02.08, 02:03

                    Senior Member

                    ****

                    Рейтинг (т): 34

                    Да, что-то сайт мертвит…
                    Приаттачиваю

                    Прикреплённый файлПрикреплённый файлUserform_MinToTaskbarWithIcon.zip (35.01 Кбайт, скачиваний: 158)


                    НарКот



                    Сообщ.
                    #9

                    ,
                    21.02.08, 07:56

                      спасибо


                      Pavel55



                      Сообщ.
                      #10

                      ,
                      21.02.08, 15:48

                        Junior

                        *

                        Рейтинг (т): 12

                        bi-lya, у меня пишет: «Архив повреждён» (или Неожиданный конец архива)

                        Сообщение отредактировано: Pavel55 — 21.02.08, 15:48


                        bi-lya



                        Сообщ.
                        #11

                        ,
                        21.02.08, 23:06

                          Senior Member

                          ****

                          Рейтинг (т): 34

                          Pavel55, скорее всего — недогружаете. Попробовал загрузить и разархивировать встроенным виндозовским, RAR, 7-ZIP — все получилось

                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                          0 пользователей:

                          • Предыдущая тема
                          • VB for Application
                          • Следующая тема

                          Рейтинг@Mail.ru

                          [ Script execution time: 0,0303 ]   [ 16 queries used ]   [ Generated: 14.04.23, 16:45 GMT ]  

                          Понравилась статья? Поделить с друзьями:
                        • Vba excel worksheet calculate
                        • Vba excel адресация ячеек
                        • Vba excel with selection validation
                        • Vba excel userform календарь
                        • Vba excel workbooks saveas