点击CommandButton7弹出日历并将选中日期填入TextBox13的实现方案
核心思路
之前双击单元格的逻辑是给单元格赋值,现在要改成给TextBox13赋值,关键是让日历窗体frm_Cal正确传递选中的日期,再把值写入目标文本框。
步骤1:修改日历窗体frm_Cal的代码
假设你的日历窗体里有一个确认按钮(比如CommandButton1)用来确认选中日期,添加以下代码:
Private Sub CommandButton1_Click() ' 这里假设用的是MonthView控件,换成你实际的日历控件(比如DTPicker) Me.Tag = Me.MonthView1.Value ' 把选中日期暂存在窗体的Tag属性 Me.Hide ' 隐藏窗体,不要直接卸载,否则值会丢失 End Sub ' 处理用户直接关闭窗体的情况 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = vbFormControlMenu Then Me.Tag = "" ' 清空Tag,标记未选择日期 Me.Hide Cancel = True ' 取消默认卸载操作 End If End Sub
步骤2:编写CommandButton7的点击事件代码
根据TextBox13的位置,分两种情况:
情况1:CommandButton7和TextBox13在同一个用户窗体上
Private Sub CommandButton7_Click() ' 模态显示日历窗体,确保用户操作完再继续执行 frm_Cal.Show vbModal ' 检查是否有选中的有效日期 If IsDate(frm_Cal.Tag) Then ' 格式化日期后填入TextBox13,格式可按需修改(比如"mm/dd/yyyy") Me.TextBox13.Value = Format(frm_Cal.Tag, "yyyy-mm-dd") End If ' 最后卸载窗体释放资源 Unload frm_Cal End Sub
情况2:CommandButton7和TextBox13在工作表上(ActiveX控件)
Private Sub CommandButton7_Click() frm_Cal.Show vbModal If IsDate(frm_Cal.Tag) Then ' 替换Sheet1为你的实际工作表名称 Sheet1.TextBox13.Value = Format(frm_Cal.Tag, "yyyy-mm-dd") End If Unload frm_Cal End Sub
常见问题排查
- 控件名称错误:检查
TextBox13、CommandButton7、frm_Cal的名称是否和实际一致,避免拼写错误。 - 日历控件类型不匹配:如果你的日历不是MonthView,比如用的是DTPicker,把
Me.MonthView1.Value换成Me.DTPicker1.Value。 - 窗体未正确传递值:不要在日历窗体的确认按钮里用
Unload Me,要用Me.Hide,否则窗体卸载后Tag属性的值会丢失。
内容的提问来源于stack exchange,提问作者Spark
相关产品推荐
相关产品推荐

