2013-01-22 20 views
1

在我的Excel VBA用戶表單中有一個文本框,用戶應該在其中輸入格式爲dd-mm-yy的日期。如果輸入爲09-22-13,則應更新爲22-09-2013。此文本框的ControlSource屬性設置爲單元格的地址;這個單元格的值也應該變成22-09-2013如何強制ControlSource更新(Excel用戶表單)

我試過的所有事件處理程序的問題是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 
+0

已實現我忘了upvote你:) +1 – bonCodigo

回答

2

這裏要考慮的事情,controlsource updateevent order不能改變現在看來,這樣您可以嘗試textbox event存在前textbox event因爲前者火前加worksheet_change事件..

Reference:

  • 它說,如果您使用ContolSource,那麼文本框將在每次相關單元更改時刷新,但請注意,反之亦然。更改文本框&細胞就會改變
+0

更改從VBA的textBox值(使用TextBox_MynDate.Value =行)似乎並沒有改變單元格值,否則我會有一個無限的遞歸我猜。 –

+0

worksheet_change事件似乎是避免對單元格地址進行硬編碼的唯一方法,但我最終對其進行了硬編碼,因爲在我的情況下,它更簡單。 –

+0

@YuccaV用'Sheet change event'解決無限循環,你可以設置'Events to false'。 – bonCodigo

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

「 」如果窗體卸載和編輯工作表 '形式的文本框或複選框將不會鏈接到這些變化改變了表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 

結束子

「添加到激活 私人小組UserForm_Activate()

ReGetCtrlSources 

    End Sub