无模式MsgBox,错误捕获,.Find

我有一个子例程search另一个工作簿中的string的出现。 我试图得到一个错误消息,如果找不到string(这很可能是由于拼写错误)popup,如vbModeless,并允许用户点击search表单中的单元格与正确的值。 然后我想用新的价值恢复search。

我现在坚持使我的简单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给我的悲伤。

我不相信你可以使用msgbox vbModeless。 这是用于用户表单的Show方法。

你可能需要做的是创build一个用户表单,它有一个refedit控件和一个button。 然后,他们可以用refedit控件选取一个单元格。 当用户单击该button时,在窗体上设置一个公共variables,并选中单元格引用。

然后,您需要在用户表单上使用“.Show vbModal”,并从公共variables中读取它们所选的单元格。

编辑:

其实,你不应该需要公共variables,因为refedit控件应该是表单的公共属性。

我对这里的要求并不十分确定。 给定dgo的searchstring,以及包含猫和狗的单元格的工作表。 你想让用户:

(a)编辑包含的单元格,改为使用dgo

这将使用由andynormancx概述的模式forms和RefEdit控制。 就像一个MsgBox,模式窗体暂停macros直到窗体closures

(b)允许用户点击包含的细胞,然后用作为search项重新运行search

这更复杂。 我认为你需要在这里看事件。 这很好,如果你的子程序几乎是独立的,但如果它是一个更大的程序的一部分,那么这可能需要大量的重写