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

时间:2009-02-18 17:10:57

标签: excel vba excel-vba

我有一个子程序,用于在另一个工作簿中搜索字符串的出现位置。如果无法找到字符串(这很可能是由于拼写错误),我正在尝试弹出一条错误消息,如vbModeless,并允许用户点击搜索到的工作表中的单元格并使用正确的值。然后我想用新值继续搜索。

我现在正忙着让我简单的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让我感到悲伤。

2 个答案:

答案 0 :(得分:3)

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

您可能需要做的是创建一个具有refedit控件和按钮的用户表单。然后他们可以使用refedit控件选择一个单元格。当用户点击按钮时,在表单上设置一个公共变量,单元格引用所选的。

然后你需要在用户表单上使用“.Show vbModal”,并从表单公共变量中读取他们选择的单元格。

编辑:

实际上,您不应该需要公共变量,因为refedit控件应该是表单的公共属性。

答案 1 :(得分:0)

我对这里的要求并不是100%肯定。给定 dgo 的搜索字符串和包含 bird cat dog 的单元格的工作表。您希望用户:

(a)编辑包含 dog 的单元格并将其更改为 dgo 而不是

这将使用andynormancx概述的模态形式和RefEdit控件。与MsgBox一样,模态窗体暂停宏直到窗体关闭

(b)允许用户点击包含 dog 的单元格,然后使用 dog 作为搜索词重新运行搜索

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