ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 14642|回复: 10

[求助] 请问高手,如何在VBA代码中最小化当前窗体

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-6-9 09:36 | 显示全部楼层 |阅读模式
请问高手,如何在VBA代码中最小化当前窗体?一般最小化是自己去点击,我希望用代码去实现。
下面这些代码只是能让窗体出现最小化、最大化按钮,但如何写代码执行某窗体最小化我却不知道
'这以下的代码放在窗体代码的顶部
'注意下面还有放在底部的代码
Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex 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 SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME As Long = &H40000 '(恢复大小)
Private Const WS_MINIMIZEBOX As Long = &H20000 '(最小化)
Private Const WS_MAXIMIZEBOX As Long = &H10000 '(最大化)         
'这以上的代码放在窗体代码的顶部



'这以下的代码放在窗体代码的底部
'窗体UserForm的初始化
Private Sub UserForm_Initialize()
Dim hWndForm As Long
Dim IStyle As Long
hWndForm = FindWindow("ThunderDFrame", Me.Caption)
IStyle = GetWindowLong(hWndForm, GWL_STYLE)
IStyle = IStyle Or WS_THICKFRAME '还原
IStyle = IStyle Or WS_MINIMIZEBOX '最小化
IStyle = IStyle Or WS_MAXIMIZEBOX '最大化
SetWindowLong hWndForm, GWL_STYLE, IStyle
End Sub
'这以上的代码放在窗体代码的底部

TA的精华主题

TA的得分主题

发表于 2012-6-9 19:45 | 显示全部楼层
都没高手出来教下啊{:soso_e127:}快换接头

TA的精华主题

TA的得分主题

发表于 2012-6-11 09:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-6-11 16:10 | 显示全部楼层
Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex 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 SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME As Long = &H40000 '(恢复大小)
Private Const WS_MINIMIZEBOX As Long = &H20000 '(最小化)
Private Const WS_MAXIMIZEBOX As Long = &H10000 '(最大化)
'这以上的代码放在窗体代码的顶部

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SYSCOMMAND = &H112
Private Const SC_MINIMIZE = &HF020&

Private Sub UserForm_Activate()
Dim hWndForm As Long
Dim IStyle As Long
hWndForm = FindWindow("ThunderDFrame", Me.Caption)
IStyle = GetWindowLong(hWndForm, GWL_STYLE)
IStyle = IStyle Or WS_THICKFRAME '还原
IStyle = IStyle Or WS_MINIMIZEBOX '最小化
IStyle = IStyle Or WS_MAXIMIZEBOX '最大化
SetWindowLong hWndForm, GWL_STYLE, IStyle
SendMessage hWndForm, WM_SYSCOMMAND, SC_MINIMIZE, ByVal 0& '注释:使窗体最小化
End Sub

TA的精华主题

TA的得分主题

发表于 2012-6-11 16:16 | 显示全部楼层
我录制的最小化 WORD 窗口(不知道是不是楼主想要的,最小化当前文档窗口需要再录)

' 最小化当前窗口 Macro
    Application.WindowState = wdWindowStateMinimize

TA的精华主题

TA的得分主题

发表于 2012-6-11 17:35 | 显示全部楼层
  1. Application.ActiveWindow.WindowState = wdWindowStateMinimize
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-6-12 09:44 | 显示全部楼层
5楼6楼说的是应用软件窗口最小化,我说的是VBA窗体最小化
4楼的意思不知道是什么,好象是说打开窗体就最小化,是吗?
SendMessage hWndForm, WM_SYSCOMMAND, SC_MINIMIZE, ByVal 0& '注释:使窗体最小化
问题是,能不能将它分别放在各个宏中呢?
我试试

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-6-12 10:25 | 显示全部楼层
谢谢四楼的sqhsqhli,你的代码解决了我的问题。我在你的代码基础上最后做成这样的代码就可以实现我的目标:


Private Sub CommandButton14_Click()
Me.Hide
Me.Show 0
Dim hWndForm As Long
Dim IStyle As Long
hWndForm = FindWindow("ThunderDFrame", Me.Caption)
IStyle = GetWindowLong(hWndForm, GWL_STYLE)
IStyle = IStyle Or WS_THICKFRAME '还原
IStyle = IStyle Or WS_MINIMIZEBOX '最小化
IStyle = IStyle Or WS_MAXIMIZEBOX '最大化
SetWindowLong hWndForm, GWL_STYLE, IStyle
SendMessage hWndForm, WM_SYSCOMMAND, SC_MINIMIZE, ByVal 0& '注释:使窗体最小化
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-6-12 10:31 | 显示全部楼层
本帖最后由 清风明月九 于 2012-6-12 14:50 编辑

谢谢四楼sqhsqhli,您解决了我的将窗体最小化的难题。
Private Const SC_MINIMIZE = &HF020& '最小化窗体
Private Const SC_CLOSE = &HF060& '关闭窗体
Private Const SC_MAXIMIZE = &HF030& '最大化窗体
Private Const SC_RESTORE = &HF120& '恢复窗体大小
Private Const WM_SETTEXT = &HC '设置窗体的Caption
Private Const WM_GETTEXT = &HD '取得窗体的caption
再定义这些公共宏,就可以执行关闭、最大化、恢复窗体等

再次谢谢四楼sqhsqhli



TA的精华主题

TA的得分主题

发表于 2015-5-7 18:06 | 显示全部楼层
您好,楼主。非常想看一看您编译通过的窗口最小化的代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-15 18:13 , Processed in 0.024080 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表