如何强制ControlSource更新(excel userforms)

时间:2013-01-22 16:08:37

标签: vba datetime excel-vba event-handling userform

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

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

你可以帮忙吗?感谢。

22-09-2013

2 个答案:

答案 0 :(得分:2)

此处需要考虑的事项,controlsource updateevent order似乎无法更改,因此您可能会尝试在worksheet_change之前添加textbox event事件在textbox event存在之前..

Reference:

  • 它说,如果您使用ContolSource,那么每次相关单元格更改时文本框都会刷新,但请注意,反之亦然。更改TextBox&单元格将改变

答案 1 :(得分:0)

   Private Function GetCtrlSourceStr$()
        On Error Resume Next
        GetCtrlSourceStr = wCtrl.ControlSource
   End Function

' '如果已卸载Form,则通过编辑工作表更改Sheet FoFiCriteria中的值 '表单文本框或复选框将不会链接到这些更改.. '表单显示或隐藏仍将与其控件源同步 '表单打开时工作,但FoFiCriteria不是活动表 '这些ControlSource字符串需要为,SHeetName!B14 .. FoFiCriteria!L9 '来自 ' RaAdd = ra(3,Ci).Address(False,False,,True)  ' .ControlSource = Mid(RaAdd,InStr(RaAdd,"]")+ 1)

'因此,对表单进行编辑应链接到其工作表上的控件源范围 '所以我们需要 '

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

End Sub

&#39;添加激活       Private Sub UserForm_Activate()

   ReGetCtrlSources

   End Sub