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

我刚刚从工具>附加控件中添加了日历12.0。 日历工作正常,我把它吐出date到正确的单元格。 然而,我想要的是真正使日历从一个命令button可见,因为我的表单包含一堆字段,我不想让这个日历陷于窗体。 我曾尝试Calendar1.show但.show不是一个选项。

所以最终我需要一个命令button来显示日历,允许用户select(我有),然后closures日历。 任何帮助? 我提前谢谢你!!

bdubb

在这个片段中,CommandButton1来自ActiveX控件,而不是表单控件。 它需要你点击button来显示日历(在你点击的button旁边popup),然后再次点击button来隐藏日历。

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 

显然,不同的button需要不同的链接单元格,但是这意味着你可以有一个单一的日历控件,它由多个button显示(如果这是你想要的)。

不幸的是,当它的任何事件触发的时候(比如AfterUpdate),你不能隐藏控件。 它只是不想消失!

隐藏/closures日历控件仍然不起作用(2015年新年=几乎四年后),但我认为我find了一个解决方法来隐藏控制后发生的事件。

我有一个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()对我来说是一个谜。

接下来的问题是当我删除鼠标时隐藏控件。 鼠标事件似乎是不可能的日历控制…