2015-12-10 77 views
1

我已經創建了一個Userform,其中包含幾個選項按鈕作爲較大宏的一部分。如果存在特定的計算錯誤,用戶窗體將加載,並要求用戶選擇一種方法來糾正錯誤。一個選項啓用RefEdit控件,並允許用戶選擇新的起始單元格(並跳過當前和新定義的範圍之間的錯誤和單元格)。UserForm RefEdit - 重新初始化範圍選擇的代碼

我已經使用_Exit事件來設置一些錯誤檢查(例如,以確保選擇了有效範圍或確保範圍是1x1範圍),但我一直無法找到一種方法來強制RefEdit控件「重新初始化」。我曾嘗試使用RefEdit.SetFocus方法,但這不會產生我想要的結果。

基本上,有一個命令我可以使用它反映在RefEdit控件上單擊dropbutton的行爲?

Private Sub RefEdit_NewStartCell_Exit(ByVal Cancel As MSForms.ReturnBoolean) On Error Resume Next Set UserRange = Range(RefEdit_NewStartCell.Text) If Err.Number <> 0 Then MsgBox "Invalid range selected" RefEdit_NewStartCell.SetFocus End If On Error GoTo 0

+0

只是一個愚蠢的問題:當有錯誤就不會被取消'= TRUE;所有你需要的? (我確定我弄錯了) –

+0

不知道,我不太熟悉Cancel的工作原理。這隻會取代這條線嗎? '如果Err.Number <> 0 Then' – CrazyPianoMan

+0

'Cancel = True'只會阻止如下操作:在ThisWorkbook:Private Sub Workbook_BeforeClose(取消爲布爾值):取消= True:End Sub如果您試圖關閉它觸發BeforeClose的工作簿。如果(在結束小組)'取消=真實'然後行動將被取消本身=>你不能關閉工作簿。如果RefEdit_NewStartCell_Exit的作用相同,那麼'如果Err.Number <> 0則Cancel = True'將阻止它退出,並且您將堅持選擇,直到'Range(RefEdit_NewStartCell.Text)'在Exit處沒有錯誤...但我不知道...只是試試:) –

回答

0

這不是一個「真正」的答案,但有解決方法(大部分時間使用RefEdit控件的Excel崩潰,所以我不能運行測試...對不起)

與RefEdit控件做吧如果你想(我已經使用了一個文本框):

Private Sub TextBox1_Enter() 

    On Error Resume Next 
    Set UserRange = Nothing 
    UserForm1.Hide 

    While UserRange.Count <> 1 
    Set UserRange = Application.InputBox("Select Range", , , , , , , 8) 
    Wend 

    CommandButton1.SetFocus 
    TextBox1.Value = UserRange.Address 
    UserForm1.Show 

End Sub 

希望有人得到更好的答案很快^。^;

至少輸入框只會返回一個有效範圍(無需確認)