2

在我的 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
4

2 回答 2

2

这里有一些需要考虑的事情,controlsource update并且event order似乎无法更改,因此您可以尝试worksheet_change在 the 之前添加事件,textbox event因为前者在textbox event存在之前触发..

参考:

  • 它说,如果您使用 ContolSource,那么每次相关单元格更改时文本框都会刷新,但请注意,反之亦然。更改一个文本框 & 单元格将改变
于 2013-01-22T16:57:09.440 回答
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

结束子

' 添加激活 Private Sub UserForm_Activate()

   ReGetCtrlSources

   End Sub
于 2017-03-01T07:00:33.620 回答