2009-02-18 102 views
2

我有一個子例程,用於搜索另一個工作簿中字符串的出現。如果找不到字符串(這很可能是由於拼寫錯誤),我試圖得到一個錯誤消息,彈出如vbModeless,並允許用戶點擊搜索表中單元格的正確值。然後我想用新的價值恢復搜索。無模式MsgBox,錯誤捕獲,。找到

我現在堅持讓我的簡單MsgBox無模式。 任何人都可以幫忙嗎?到目前爲止,我已經(簡體):

With ... 
    On Error GoTo UserSelect 
    celladdress = .Range("a1:bb100").Find("searchstring").Address 

而且我的錯誤標籤:

UserSelect: 
    MsgBox("Select the cell with the correct spelling") vbModeless 
    newstring = ActiveCell.Value 
    searchstring = newstring 
    Resume 

我認爲這是無模式MSGBOX給我的悲傷。

回答

3

我不相信你可以在msgbox上使用vbModeless。這是用於用戶表單的Show方法。

你可能需要做的是創建一個用戶表單,它有一個refedit控件和一個按鈕。然後他們可以用refedit控件選擇一個單元格。當用戶單擊該按鈕時,將在窗體上使用所選單元格引用設置一個公共變量。

然後,您需要在用戶表單上使用「.Show vbModal」,並讀取它們從表單public變量中選擇的單元格。

編輯:

其實,你不應該需要公共變量作爲RefEdit控件應該是形式的公共財產反正。

+0

啊。我怎麼能做一個簡單的用戶表單做基本相同。即:暫停背景代碼的運行,直到用戶選擇一個單元並點擊一個按鈕? – 2009-02-18 17:20:31

0

我不是100%確定這裏的要求。鑑於搜索字符串DGO和含細胞工作表。你希望用戶:

(一)編輯包含細胞並改變它說DGO代替

這將使用由andynormancx概括的模式窗體和RefEdit控件。就像一個MsgBox,模式表單暫停宏,直到窗體關閉

(二)允許用戶單擊該單元格方含,然後重新運行與作爲搜索項

搜索

這更復雜。我認爲你需要在這裏看事件。這很好,如果你的子程序幾乎是獨立的,但如果它是一個較大的程序的一部分,那麼這可能需要大量的重寫

+0

(a)排序 - 我想要一個'引用'單元格更新爲每次運行宏時,都會查看該單元格的值。也就是說,如果開始時是錯誤的,用戶的輸入會替換該「參考」值,並且錯誤不會再次發生。 – 2009-02-20 11:31:18

相關問題