【问题标题】:Excel VBA UserForm - Minimise ButtonExcel VBA 用户窗体 - 最小化按钮
【发布时间】:2018-11-23 23:32:48
【问题描述】:

大家好,

几天来,我一直在 Excel VBA 中处理几个用户表单,并在另一位先生的帮助下解决了一个问题。在处理它们时,我意识到这是一场噩梦,因为我无法将它们单击到我的电子表格中,这就是导致我提出这个问题的原因; 有没有办法在用户窗体右上角的关闭图标旁边创建一个最小化按钮?我更喜欢这个按钮,而不是一个随机按钮,但如果有可能,任何人都可以助攻。我已经尝试过.hide,但这似乎不起作用。

如果有帮助,我正在使用 Excel 2010

提前致谢:)

【问题讨论】:

  • 嘿@Doug,为了您的信息,您可以使用 Windows API 来实现这一点(这就是下面的答案)。请记住,用户窗体不会作为图标出现在任务栏上(除非您在代码中告诉它),因此如果您将其最小化或以 vbModeless 运行时,您的用户窗体很容易丢失(这不会t 将您锁定在用户窗体中)很容易迷失在其他窗口后面。还有大量其他 SO 问题以及使用 Windows API 和 VBA 的示例(很像下面的答案),如果您需要进一步的此类功能,您可能会发现这些问题很有用。

标签: vba excel excel-2010 userform


【解决方案1】:

试试这样:-

Private Sub UserForm_Initialize()
InitMaxMin Me.Caption
End Sub

将此代码放入模块中

Option Explicit
Public Declare Function FindWindowA& Lib "user32" (ByVal lpClassName$, ByVal lpWindowName$)
Public Declare Function GetWindowLongA& Lib "user32" (ByVal hwnd&, ByVal nIndex&)
Public Declare Function SetWindowLongA& Lib "user32" (ByVal hwnd&, ByVal nIndex&, ByVal dwNewLong&)
' Déclaration des constantes
Public Const GWL_STYLE As Long = -16
Public Const WS_MINIMIZEBOX = &H20000
Public Const WS_MAXIMIZEBOX = &H10000
Public Const WS_FULLSIZING = &H70000
'Attention, envoyer après changement du caption de l'UF
Public Sub InitMaxMin(mCaption As String, Optional Max As Boolean = True, Optional Min As Boolean = True _
        , Optional Sizing As Boolean = True)
Dim hwnd As Long
    hwnd = FindWindowA(vbNullString, mCaption)
    If Min Then SetWindowLongA hwnd, GWL_STYLE, GetWindowLongA(hwnd, GWL_STYLE) Or WS_MINIMIZEBOX
    If Max Then SetWindowLongA hwnd, GWL_STYLE, GetWindowLongA(hwnd, GWL_STYLE) Or WS_MAXIMIZEBOX
    If Sizing Then SetWindowLongA hwnd, GWL_STYLE, GetWindowLongA(hwnd, GWL_STYLE) Or WS_FULLSIZING
End Sub

【讨论】:

  • 它可以工作,但它仍然不允许我在电子表格最小化时使用它。
  • 好的,要显示用户表单,您可以使用 UserForm1.Show vbModeless
猜你喜欢
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多