Vba 如何强制ControlSource更新(excel用户表单)
在我的Excel VBA用户表单上有一个文本框,用户应在其中以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
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,则每次相关单元格更改时,文本框都会刷新,但请注意,情况正好相反。更改文本框&单元格将更改
从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