【问题标题】:Excel VBA Calling the Calendar via Command Button in a formExcel VBA通​​过表单中的命令按钮调用日历
【发布时间】:2011-05-09 20:54:53
【问题描述】:

我刚刚从工具 > 附加控件中添加了日历 12.0。日历工作正常,我让它将日期吐出到正确的单元格。然而,我想要的是真正使日历从命令按钮可见,因为我的表单包含一堆字段,我不想用这个日历阻塞表单。我试过 Calendar1.show 但 .show 不是一个选项。

所以最终我需要一个命令按钮来显示日历,允许用户选择(我有)然后关闭日历。有什么帮助吗?提前谢谢你!!

bdubb

【问题讨论】:

    标签: excel vba button calendar command


    【解决方案1】:

    在这个 sn-p 中,CommandButton1 来自 ActiveX 控件,而不是表单控件。它要求您单击按钮以显示日历(在您单击的按钮旁边弹出),然后再次单击该按钮以隐藏日历。

    Private Sub CommandButton1_Click()
    
    If Not Calendar1.Visible Then
        Calendar1.LinkedCell = "A1"
        Calendar1.Top = Sheet1.CommandButton1.Top
        Calendar1.Left = Sheet1.CommandButton1.Left + Sheet1.CommandButton1.Width + 1
        Calendar1.Visible = True
    Else
        Calendar1.Visible = False
    End If
    
    End Sub
    

    显然,不同的按钮需要不同的链接单元格,但这确实意味着您可以拥有一个由多个按钮显示的日历控件(如果您想要的话)。

    不幸的是,当控件的任何事件触发时(例如 AfterUpdate),您似乎无法隐藏控件。它只是不想消失!!

    【讨论】:

    • 感谢您的回复,但我现在看到使用 DTPicker 是可行的方法,因为它可以使控件保持合适的大小并在单击时展开到日历视图。感谢您的帮助
    【解决方案2】:

    隐藏/关闭日历控件仍然不起作用(2015 年新年 = 差不多四年后),但我想我找到了一种解决方法,可以在触发事件后隐藏控件。

    我有一个 Calendar1_AfterUpdate(),它在 Calendar1_Click() 之前启动。代码直接放在工作表中,而不是放在模块中。

    Private Sub Calendar1_AfterUpdate()
      Range("a1") = Me.Calendar1.Value
      ' Next two lines does not work within AfterUpdate
      ' When running step by step it seems to work but the control is
      ' visible when End Sub has run
      Me.Calendar1.Visible = True
      Me.Calendar1.Visible = False
    End Sub
    

    我只是添加了这个

    Private Sub Calendar1_Click()
      Me.Calendar1.Visible = True
      Me.Calendar1.Visible = False
    End Sub
    

    请注意,出于某种原因,必须在隐藏之前使控件可见。

    为什么它不能直接在 Calendar1_AfterUpdate() 中工作对我来说是个谜。

    下一个问题是当我移除鼠标时隐藏控件。鼠标事件在日历控件中似乎是不可能的......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 2011-10-14
      • 2012-01-08
      • 1970-01-01
      相关资源
      最近更新 更多