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

首先,不要笑。 如果你这样做,只要静静地做。 我不知道如何编写循环Visual Basic,但我把我的最好的镜头。 我正在尽力学习VBA,我只是需要一个正确的方向。 这个想法是我想写一个简单的macros,看看每个工作表,评估是否有在第19-43行的分组,如果有分组,摆脱分组,如果没有分组,去下一个工作表,如果没有更多的工作表,结束循环。

这是我的尝试,显然没有工作。

Dim V As Variant

V = ActiveWorksheet For Each V In Workbook Rows("a29:43").Select Selection.Rows.Ungroup Next 

现在,我也不知道资格证书是什么样子,如果是分组,那么这个,如果没有分组,那么这个。 我会想象这是像grouping = true的东西,但我无法弄清楚。 我非常感谢任何花时间看这个的人。

您需要定义要迭代的集合,因此在这种情况下,它将是工作簿中包含的工作表:

 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. 

顺便说一句,我不知道是否需要提到,但为了以防万一,我build议你避免使用单字符variables名称。

几件事:

  1. 根据@pnuts,你在目标范围内缺less一个“A”。 这可能是至关重要的。
  2. 如果行未分组,则Ungroup将失败。 这有点像Autofilter
  3. 最好的做法是使用Range –not Rows ,并且只使用RangeRows属性 – 当处理目标单元格时,除非需要或者certificate不同的方法。

这是一个非常不同的看法。 注意每个variables的清晰和明确的声明。 另外,阅读评论。 他们不是最好的,但他们可以帮助你明显的学习更多的VBA。 ;)

 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 

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