首页 文章

如何强制ControlSource更新(excel userforms)

提问于
浏览
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

2 回答

  • 2

    这里要考虑的事情, controlsource updateevent order 似乎无法改变,所以你可以尝试在 textbox event 之前添加 worksheet_change 事件,因为前者在 textbox event 存在之前发生..

    Reference:

    • 它说,如果您使用ContolSource,那么每次相关单元格更改时文本框都会刷新,但请注意,反之亦然 . 更改TextBox并且单元格将更改
  • 0
    Private Function GetCtrlSourceStr$()
            On Error Resume Next
            GetCtrlSourceStr = wCtrl.ControlSource
       End Function
    

    ''如果Form被卸载并且Sheet FoFiCriteria中的值通过编辑工作表而改变'表单Textboxes或Checkboxes将不会链接到这些更改..'表单显示或隐藏仍将与其控件源同步'以便工作时表单已打开,但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
    

相关问题