VBA选择工作表时报Select Method of WorkSheet class failed错误咨询
VBA报错
Select Method of WorkSheet class failed的可能原因 - 工作表处于隐藏状态:如果目标工作表被设置为普通隐藏(
xlSheetHidden)或深度隐藏(xlSheetVeryHidden),无法直接调用Select方法选中,是该报错最常见的诱因。 - 工作簿开启了结构保护:如果打开的目标工作簿设置了「保护结构和窗口」,会限制工作表的选中、移动、新增等操作,直接导致
Select方法调用失败。 - 工作簿处于受保护视图:如果打开的文件来源于互联网、邮箱附件等不可信位置,未点击「启用编辑」的情况下Excel会进入受保护视图,所有VBA对工作表的操作都会被拦截。
- 工作簿处于共享状态:如果目标工作簿开启了多人共享编辑功能,部分工作表操作接口会被限制,也可能触发该报错。
- 变量隐式声明带来的偶发异常:你代码中
Dim targetSheet1, targetSheet2, targetName1, targetName2, targetDir As String的写法,只有targetDir被显式声明为字符串类型,其余变量均为默认的Variant类型,极端情况下如果工作表名称包含不可见特殊字符、全角半角符号混淆时,可能出现名称匹配偏差,即便进入条件分支也无法正确定位工作表对象。
修复方案
你的代码中Select语句属于完全冗余的操作,VBA中工作表Copy方法不需要提前选中工作表,直接删除所有Select相关语句即可规避该错误,优化后的循环逻辑参考:
For Each sheet In myBook.Worksheets If sheet.Name = targetSheet1 Then sheet.Copy ActiveWorkbook.SaveAs Filename:=targetName1, FileFormat:=xlCSVUTF8, CreateBackup:=False ActiveWorkbook.Close SaveChanges:=False ElseIf sheet.Name = targetSheet2 Then sheet.Copy ActiveWorkbook.SaveAs Filename:=targetName2, FileFormat:=xlCSVUTF8, CreateBackup:=False ActiveWorkbook.Close SaveChanges:=False End If Next sheet
另外建议调整变量声明写法,避免隐式声明问题:
Dim targetSheet1 As String, targetSheet2 As String, targetName1 As String, targetName2 As String, targetDir As String
内容的提问来源于stack exchange,提问作者Ong K.S
相关产品推荐
相关产品推荐

