Schreibschleife für aktive Arbeitsmappe

Vor allem, lache nicht. Und wenn du es tust, tu es einfach leise. Ich habe keine Ahnung, wie ich Visual Basic schreiben kann, aber ich habe mein Bestes gegeben. Ich versuche VBA so gut wie möglich zu lernen und brauche nur einen Schub in die richtige Richtung. Die Idee ist, ich möchte ein einfaches Makro schreiben, das jedes Arbeitsblatt betrachtet, ob Gruppen in den Zeilen 19-43 gruppiert werden oder nicht, wenn es eine Gruppierung gibt, die Gruppierung loswird, wenn es keine Gruppierung gibt, gehe zum nächsten Arbeitsblatt, und wenn keine Arbeitsblätter mehr vorhanden sind, beenden Sie die loop.

Hier ist mein Versuch, der offensichtlich nicht funktioniert hat.

Dim V als Variante

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

Nun, ich habe auch keine Ahnung, was die Qualifikation ist, etwas zu sagen, wenn es gruppiert ist, dann das, wenn nicht gruppiert, dann das. Ich könnte mir vorstellen, dass es etwas wie Gruppierung = wahr ist, aber ich konnte es nicht herausfinden. Ich bin SEHR dankbar für alle, die time haben, sich das anzusehen.

Solutions Collecting From Web of "Schreibschleife für aktive Arbeitsmappe"

Sie müssen die Sammlung definieren, die Sie über iterieren möchten. In diesem Fall wären es die in der Arbeitsmappe enthaltenen Arbeitsblätter:

 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. 

Nebenbei, ich weiß nicht, ob es erwähnt werden muss, aber nur für den Fall, ich würde empfehlen, dass Sie vermeiden, jemals single-character variablesnamen zu verwenden.

Ein paar Dinge:

  1. Wie bei @pnuts fehlt dir ein "A" in deinem Zielbereich. Dies kann kritisch sein.
  2. Ungroup wird nicht ausgeführt, wenn die Zeilen nicht gruppiert sind. Das funktioniert ähnlich wie Autofilter .
  3. Die beste Vorgehensweise wäre die Verwendung von Range –not Rows und die Verwendung der Rows Eigenschaft von Range beim Umgang mit Zielzellen, sofern nicht ein anderer Ansatz erforderlich oder gerechtfertigt ist.

Hier ist eine nicht so unterschiedliche Einstellung. Beachten Sie die eindeutigen und expliziten Deklarationen jeder variables. Lesen Sie auch die Kommentare. Sie sind nicht die Besten, aber sie können dir auf deiner offensichtlichen search helfen, mehr VBA zu lernen. 😉

 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 

Lassen Sie uns wissen, ob das hilft.