Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 为活动工作簿编写循环语句_Vba_Loops_Excel - Fatal编程技术网

Vba 为活动工作簿编写循环语句

Vba 为活动工作簿编写循环语句,vba,loops,excel,Vba,Loops,Excel,首先,不要笑。如果你做了,就安静地做。我不知道如何编写循环Visual basic,但我尽了最大努力。我正在尽我所能通过实践来学习VBA,我只需要朝着正确的方向努力。我想写一个简单的宏,查看每个工作表,评估第19-43行是否有分组,如果有分组,去掉分组,如果没有分组,转到下一个工作表,如果没有更多工作表,结束循环 这是我的尝试,显然没有成功 Dim V作为变体 V = ActiveWorksheet For Each V In Workbook Rows("a29:43").Select

首先,不要笑。如果你做了,就安静地做。我不知道如何编写循环Visual basic,但我尽了最大努力。我正在尽我所能通过实践来学习VBA,我只需要朝着正确的方向努力。我想写一个简单的宏,查看每个工作表,评估第19-43行是否有分组,如果有分组,去掉分组,如果没有分组,转到下一个工作表,如果没有更多工作表,结束循环

这是我的尝试,显然没有成功

Dim V作为变体

V = ActiveWorksheet

For Each V In Workbook

Rows("a29:43").Select

Selection.Rows.Ungroup

Next

现在,我也不知道限定条件是什么,如果它是分组的,那么这个,如果不是分组的,那么这个。我会想象这是分组=真的,但我无法理解。我非常感谢任何抽出时间来研究这一点的人

您需要定义要迭代的集合,因此在本例中,它将是工作簿中包含的工作表:

Dim wbk As Workbook
Dim sht As WorkSheet

Set wbk = ActiveWorkbook

For Each sht In wbk.Worksheets

  sht.Rows("a29:43").Select ' this may give you trouble. Possibly try sht.Range("a29:a43").Select?

  Selection.Rows.Ungroup

Next

Set wbk = Nothing ' Clean up our objects. Just to be sure.
顺便说一句,我不知道是否需要提及它,但为了以防万一,我建议您避免使用单字符变量名。

两件事:

  • 根据@pnuts,您在目标范围内缺少一个“A”。这可能是至关重要的
  • 如果行未分组,
    取消分组
    将失败。这有点像
    Autofilter
  • 最佳做法是在处理目标单元格时使用
    范围
    ——而不是
    ,只使用
    范围
    属性,除非需要或证明有不同的方法
  • 这是一个没有什么不同的看法。请注意每个变量的明确声明。另外,请阅读评论。它们不是最好的,但它们可以帮助您学习更多VBA


    让我们知道这是否有帮助。

    首先,对于工作表中的每个V
    ,感谢您花时间编写解决方案。当我运行这个解决方案时,它会显示“运行时错误424”对象是必需的。它指向“工作簿.工作表中的每个V”行。你知道为什么会这样吗?另外,谢谢你指出使用单字符名称的缺点。对于成长为像你这样的VBA专业人士,你有什么建议吗?记住,我几乎是从零开始的。哈哈,看“专业版”。我认为对体面的面向对象编程技术的自我厌恶和漠不关心是一个良好的开端。之后,我建议使用Excel的“Record Macro”选项查看一些语言或实现简单任务所采取的步骤。这些命令通常非常冗长,但允许您查看用于实现结果的命令。接下来,你需要做大量的练习和自我测试。这是一种相当直观的语言,可以拾取range类的.ungroup方法。在最后一行“selection.rows.ungroup”的想法中出现错误。我怀疑,如果使用分组行,则无法定义此处定义的特定区域。您需要选择整行:
    sht.Rows(“29:43”)
    。此外,如果调用“Ungroup”方法时出错,则可能是所选范围没有分组。这里的内容非常好。谢谢分享。你教了我一些关于这个的好东西。不幸的是,当我将它添加到VBA中并执行它时,什么都没有发生。当我点击alt+F11并查看代码时,名称以黄色突出显示,我不知道为什么。我真的把你写的东西贴到了窗户上。但即使它不起作用,这也是一些有趣的东西。谢谢你在这里转转。哪个部分会变成黄色,显示什么错误信息?此部分:
    子解组范围()
    ?如果是这样,请将名称更改为其他名称,如
    Sub-Boom()
    或其他任何名称。这基本上意味着您有另一个同名的宏。另外,确保它位于模块内部,而不是一张纸。
    Sub UngroupRanges()
    
        Dim wBk As Workbook, wSht As Worksheet
        Dim rTarget As Range
    
        Set wBk = ThisWorkbook 'Let wBk be this workbook.
    
        For Each wSht In wBk.Worksheets 'Read: for each sheet in this workbook's collection of worksheets.
            Set rTarget = wSht.Range("A29:A43") 'Read: I'll be setting rTarget as my target cells.
            On Error Resume Next 'Read: If I hit an error after this line, I'll just continue executing.
            rTarget.Rows.Ungroup 'Read: For all rows in rTarget, I'll do an ungroup.
            On Error GoTo 0 'Read: If I hit an error after this, I won't skip anymore.
        Next wSht 'Read: Move on to next worksheet.
    
        Set wBk = Nothing 'Read: Release the assignment of this workbook to wBk.
    
    End Sub