如何实现VBA输入框重复查询工作簿中是否存在指定工作表?
VBA实现重复输入工作表名称直到找到存在的表
你的需求不需要用For循环来实现重复输入逻辑,Do...Loop循环是更合适的选择,它能让你持续弹出InputBox,直到用户输入存在的工作表名称,或者主动取消输入。
修改后的完整代码
Sub callbyinputbox() Dim pendworkbook As Workbook Dim sht As Worksheet Dim entername As String Dim sheetExists As Boolean ' 检查目标工作簿是否已打开 On Error Resume Next Set pendworkbook = Workbooks("pend_app_new.xlsx") On Error GoTo 0 If pendworkbook Is Nothing Then MsgBox "目标工作簿未打开,请先打开pend_app_new.xlsx" Exit Sub End If Do sheetExists = False entername = InputBox("Enter name", "Search Sheet") ' 处理用户取消输入的情况 If entername = "" Then MsgBox "已取消操作" Exit Sub End If ' 遍历工作表检查是否存在 For Each sht In pendworkbook.Worksheets If sht.Name = entername Then sheetExists = True sht.Activate ' 直接激活找到的工作表对象,比用名称索引更可靠 Exit For ' 找到后退出遍历循环 End If Next sht ' 若不存在,提示用户重新输入 If Not sheetExists Then MsgBox "你输入的 " & entername & vbNewLine & " 不存在,请重新输入" End If Loop Until sheetExists ' 直到找到存在的工作表才退出循环 End Sub
关键逻辑说明
- Do...Loop Until循环:核心结构,重复执行输入-检查流程,直到找到存在的工作表才终止循环。
- 取消输入处理:用户点击InputBox的「取消」按钮时,输入内容为空,此时直接退出子程序,避免死循环。
- 工作簿存在校验:加入错误捕获,先确认目标工作簿已打开,避免因工作簿未打开导致的运行报错。
- 激活方式优化:直接使用遍历中匹配到的
sht对象激活工作表,比通过名称索引更稳定,规避潜在的名称匹配问题。
内容的提问来源于stack exchange,提问作者Arman266
相关产品推荐
相关产品推荐

