包含不同类型 VBA Excel 的组的每个下一个循环中的类型不匹配

Posted

技术标签:

【中文标题】包含不同类型 VBA Excel 的组的每个下一个循环中的类型不匹配【英文标题】:Type Mismatch in For Each Next Loop of Group Containing Different Types VBA Excel 【发布时间】:2019-02-19 11:32:33 【问题描述】:

我正在 Excel 中编写一个宏来提取在不同工作簿中的各种工作表上找到的特定信息。唯一的问题是工作表的命名并不总是完全一致。然而,他们的名字确实包含“ExpandedEngReport”的通用字符串。为了解决这个问题,我尝试使用 FOR 循环和 Like 命令来搜索包含此字符串的工作表,以将工作表名称与“ExpandedEngReport”的部分字符串进行比较。

此代码的 sn-p 返回类型不匹配错误。我认为这可能是由于在 For 循环正在搜索的 ActiveWorkbook.Sheets 组(见附图1)中找到的各种类型。

' Find and Select ExpandedEngReport Worksheet
Dim ws As Worksheet
Dim flg As Boolean
For Each ws In ActiveWorkbook.Sheets
    If ws.Name Like "*ExpandedEngReport*" Then
        ws.Select Not flg
        flg = True
        GoTo CONTINUE
    End If
Next ws

标签CONTINUE 指向我希望在找到并选择后在此工作表上执行的一组操作。

The ActiveWorkbook.Sheets Group contains many different types of objects. Could this be linked to the issue? Is there any way arround this?

【问题讨论】:

70 年代打来电话,他们希望自己的GoTo CONTINUE 回来。请将其替换为Exit For。如果Next ws 之后的行(顺便说一句,您也可以从那里删除ws。)不是您的CONTINUE: 所在的位置,那么您真的需要重构你的代码以消除所有的意大利面——未来你(比如当你必须在 30 天内对此进行调整时)会非常感激它。 感谢您的建议!老实说,我 4 天前刚刚制作了我的第一个宏,所以我一直在努力解决这个问题,我知道如何哈哈 【参考方案1】:

您已将Dim ws As Worksheet 调暗并通过Sheets 集合将其用作循环变量,其中can contain both Chart or Worksheet objects

所以修复是

Dim ws As Worksheet
...
For Each ws In ActiveWorkbook.Worksheets

【讨论】:

太棒了!我知道这会很简单!谢谢! @SteevJobbs,在启动新的 IPhonee 后,您可以慢慢考虑将此答案标记为已接受。谢谢! 我认为在 SO 上没有关于 .Sheets.Worksheets 的规范帖子 - 可能值得考虑?很好的答案(y)

以上是关于包含不同类型 VBA Excel 的组的每个下一个循环中的类型不匹配的主要内容,如果未能解决你的问题,请参考以下文章

s-s-rS 导出到 Excel 有错误的组页脚

VBA编程,遍历文件夹下的excel表,对每个excel表遍历做一些操作

Excel VBA:复制增量单元格值

1032 Parliament

如何用VBA将excel表导出成文本类型的文件?

VBA代码根据列的内容将excel文件拆分为多个工作簿?