Excel VBA通​​过窗体中的命令按钮调用日历

时间:2011-05-09 20:54:54

标签: excel vba button calendar command

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

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

bdubb

2 个答案:

答案 0 :(得分:1)

在此代码段中,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)。它只是不想消失!!

答案 1 :(得分:0)

隐藏/关闭日历控件仍然不起作用(新的一年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()中起作用对我来说是一个谜。

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