Excel宏开发疑问:如何筛选指定名称的工作表进行复制?
如何在VBA中精确匹配工作表名称并复制?
你遇到的问题是把其他编程语言的语法习惯带到VBA里啦——VBA的判断逻辑和Java、JS这些语言不一样,咱们来修正一下:
正确的条件判断写法
直接用单等号=做相等判断就行,因为wksCurSheet.Name本身就是字符串类型,不需要额外转换:
For Each wksCurSheet In wbkSrcBook.Sheets ' 精确匹配工作表名称的条件判断 If wksCurSheet.Name = "AO-SC" Then countSheets = countSheets + 1 wksCurSheet.Copy after:=wbkCurBook.Sheets(wbkCurBook.Sheets.Count) End If Next
为什么你之前的写法会报错?
我来逐个拆解下问题:
If (wksCurSheet.Name == "AO-SC") Then:VBA里没有双等号==的相等运算符,这是其他语言的语法,直接用会触发语法错误If (wksCurSheet.Name as String == "AO-SC") Then:同样犯了==的错误,而且VBA里的类型转换用CStr()而非as String,关键是Name属性本身就是字符串,完全没必要多此一举If (wksCurSheet.("AO-SC")) Then:这种写法不符合VBA的对象引用规则,完全不成立,自然会报错
可选:忽略大小写的匹配(如果需要)
要是你需要不区分大小写的匹配(比如允许"Ao-Sc"也被选中),可以用StrComp函数:
If StrComp(wksCurSheet.Name, "AO-SC", vbTextCompare) = 0 Then countSheets = countSheets + 1 wksCurSheet.Copy after:=wbkCurBook.Sheets(wbkCurBook.Sheets.Count) End If
不过你的需求是精确匹配,所以第一种严格相等的写法就完全够用了。
内容的提问来源于stack exchange,提问作者mat.hudak
相关产品推荐
相关产品推荐

