2009-02-18 100 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

相关问题