我在C ++方面有丰富的经验,但我仍然习惯了VBA的语法,我认为这是在我的代码中绊倒我的。
我尝试做的是有一个按钮,要求用户输入名称。如果输入的名称在B列中,则告诉用户找到的名称并选择它的位置(没问题)。如果找不到该名称,则询问用户是否想要尝试其他名称(也没有问题)。
我遇到问题的地方是"取消"纽扣。在任何时候,我希望用户能够点击"取消"并立即停止循环,但留在sub中因为我稍后会添加到此。
以下是代码:
Dim inputName As String
Dim row As Integer
Dim i As Integer
Dim tryAgainResponse As Integer
tryAgainResponse = vbOK
'Ask user for name they would like to replace'
inputName = InputBox("What is the name of the person you would like to find? (First Last)")
'Find the row that the name is located and tell the user where it is'
Do While tryAgainResponse = vbOK
For i = 1 To 1000
If Cells(i, 2).Value = inputName Then
MsgBox ("Found the name! It's located at cell B" & i & ".")
ActiveSheet.Cells(i, 2).Select
tryAgainResponse = 0
Exit Do
End If
Next i
tryAgainResponse = MsgBox("We didn't find the name you were looking for. Please try again.", vbOKCancel)
If tryAgainResponse = vbCancel Then
Exit Do
End If
inputName = InputBox("What is the name of the person you would like to find? (First Last)")
Loop
我已经尝试了很多东西,但主要的错误是当你为第一个MsgBox点击取消时,它告诉你在第一个空白方块中找到了名字。
任何帮助或建议将不胜感激!这是我的第一个VBA计划,所以它不是最漂亮的,但它确实很有趣。谢谢!
答案 0 :(得分:3)
我不确定我是否理解您要求的内容,我无法发表评论澄清,但我认为您挂断的是当您点击取消时在输入框中,输入框返回一个空白字符串,然后其余代码就会找到一个空白单元格。
使用Application.Input方法,将输入字符串声明为变量,并测试它是否为false。如果是,请使用Exit Sub退出宏。您还可以测试输入字符串是否为""然后使用您拥有的代码退出宏。
来自MrExcel
VBA中有两个版本的InputBox。
在没有对象限定符的情况下调用InputBox函数,如果用户单击“取消”,则返回文本框的内容或零长度字符串("")。
InputBox方法是Application对象的成员,因此使用Application.InputBox进行调用。它返回文本框的内容,如果用户单击“取消”,则返回False。它比InputBox函数更通用,因为它有一个Type参数,用于指定返回数据类型。
答案 1 :(得分:0)
如果取消,函数InputBox()
将返回空字符串。空字符串将与第一个为空的单元格进行比较。
这是函数的文档:http://msdn.microsoft.com/en-us/library/6z0ak68w(v=vs.90).aspx