Vba 如何强制ControlSource更新(excel用户表单)

Vba 如何强制ControlSource更新(excel用户表单),vba,datetime,excel,event-handling,userform,Vba,Datetime,Excel,Event Handling,Userform,在我的Excel VBA用户表单上有一个文本框,用户应在其中以dd-mm-yy格式输入日期。如果输入为09-22-13,则应更新为22-09-2013。此文本框的ControlSource属性设置为单元格地址;此单元格的值也应变为22-09-2013 我尝试过的所有事件处理程序的问题是,ControlSource的值在触发处理程序之前得到更新,并且我无法更改ControlSource的值,除非我硬编码它的地址(这是我想要避免的) 你能帮忙吗?谢谢 Private Sub TextBox_MyDa

在我的Excel VBA用户表单上有一个文本框,用户应在其中以
dd-mm-yy
格式输入日期。如果输入为
09-22-13
,则应更新为
22-09-2013
。此文本框的ControlSource属性设置为单元格地址;此单元格的值也应变为
22-09-2013

我尝试过的所有事件处理程序的问题是,ControlSource的值在触发处理程序之前得到更新,并且我无法更改ControlSource的值,除非我硬编码它的地址(这是我想要避免的)

你能帮忙吗?谢谢

Private Sub TextBox_MyDate_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox_MynDate.Value = Format(TextBox_MyDate.Value, "dd/mm/yyyy")
    ' TextBox_MyDate.ControlSource.Value = TextBox_MyDate.Value does not compile
    DoEvents
End Sub

这里需要考虑的是,代码>控制源更新< /COD>和<代码>事件命令< /代码>不能更改,所以您可以尝试在<代码>文本框事件之前添加<代码> WorkSuthEyType < /Cult>事件,因为前者在<代码>之前发生。p>

  • 它说,如果您使用ContolSource,则每次相关单元格更改时,文本框都会刷新,但请注意,情况正好相反。更改文本框&单元格将更改
" '如果窗体已卸载,并且通过编辑工作表更改了工作表FoFiCriteria中的值 '表单文本框或复选框将不会链接到这些更改。。 '显示或隐藏的窗体仍将与其控件源同步 '在窗体打开但FoFiCriteria不是活动工作表时工作 '这些控制源字符串必须为、、SHeetName!B14。。福菲克里特里亚!L9 ”“从 'RaAdd=ra(3,Ci).地址(False,False,True) “.ControlSource=Mid(RaAdd,InStr(RaAdd,”)”)+1)

'所以在表单上编辑应该链接到其工作表上控件源的范围 “所以我们需要 "


从VBA更改文本框值(使用textBox_MynDate.value=line)似乎不会更改单元格值,否则我想我会有一个无限递归。工作表_更改事件似乎是避免硬编码单元格地址的唯一方法,但我最终还是硬编码了它,因为在我的情况下,更简单。@YuccaV使用
工作表更改事件解决无限循环
您可以将
事件设置为false
。意识到我忘了向上投票:)+1
   Private Function GetCtrlSourceStr$()
        On Error Resume Next
        GetCtrlSourceStr = wCtrl.ControlSource
   End Function
Sub ReGetCtrlSources()
   For Each wCtrl In frd.Controls
        If GetCtrlSourceStr <> "" Then
       wCtrl.Value = Range(wCtrl.ControlSource).Value
    wCtrl.BackColor = Range(wCtrl.ControlSource).Interior.Color
       End If

   Next wCtrl
   ReGetCtrlSources

   End Sub