2016-07-27 15 views
0

Ich schrieb dieses Makro unten, um zu überprüfen, ob zwischen zwei Daten in benachbarten Spalten eine Lücke ist, und dann Spalten einzufügen, um diese Lücke zu füllen.Erweitern Letzte Spalte Excel VBA

Ich möchte, dass es auf so viele Spalten ausgeführt werden kann, wie es auf dem Arbeitsblatt gibt, aber aus bestimmten Gründen hängt DateRange auf die ursprüngliche Größe des Arbeitsblatts und berücksichtigt nicht die zusätzlichen Spalten das Makro hat hinzugefügt. Ich hatte noch nie ein Problem damit, also bin ich ratlos!

Jeder da draußen weiß, was ich tun könnte, um das zu beheben?

Sub weekendsouts() 

Dim OUTSDATA As Worksheet, LastColumn As Long, _ 
DateCell As Range, DateRange As Range 

Set OUTSDATA = Worksheets("OUTS DATA") 
LastColumn = OUTSDATA.UsedRange.Columns.Count 
Set DateRange = OUTSDATA.Range(OUTSDATA.Cells(2, 8), OUTSDATA.Cells(2, LastColumn).Address) 

For Each DateCell In DateRange 
    With DateCell 
     If .Value <> "" Then 
      If .Offset(0, 1).Value <> .Value + 1 And .Offset(0, 1).Value <> .Value Then 
       .Offset(0, 1).EntireColumn.Insert 
       .EntireColumn.Copy Destination:=.Offset(-1, 1) 
       .Offset(0, 1).Value = .Offset(0, 1).Value + 1 
      End If 
     End If 
    End With 
Next DateCell 

End Sub 
+2

Sie werden einen Standard für Schleife und Schleifen zurück wünschen '' Für LastColumn zu 8 Schritt - 1' –

+0

@ScottCraner zum zweiten Mal heute hat das Glück für mich. Ich habe meine Antwort geschrieben, bevor ich deinen Kommentar ehrlich gelesen habe! Ich werde bald einen schlechten Ruf dafür bekommen: s –

Antwort

2

Es gibt eine Reihe von Art und Weise, dies zu erreichen, halten Sie den Code habe ich die folgende Änderung vorschlägt, nach hinten arbeiten. Wenn Sie mit einer Sammlung arbeiten und sie hinzufügen, ändert sich die Größe der Sammlung, aber Ihre Referenz ist immer noch mit der Originalgröße verknüpft. Das ist das Problem, das Sie haben.

Durch die Rückwärtsverarbeitung sind Sie von der Größenänderung nicht betroffen.

diese Nutzung tun kann wie pro unten Step -1 in einer Schleife verwenden: -

Sub weekendsouts() 

Dim OUTSDATA As Worksheet, LastColumn As Long, _ 
DateCell As Range, DateRange As Range 

Set OUTSDATA = Worksheets("OUTS DATA") 
    LastColumn = OUTSDATA.UsedRange.Columns.Count 
    Set DateRange = OUTSDATA.Range(OUTSDATA.Cells(2, 8), OUTSDATA.Cells(2, LastColumn).Address) 

     For LastColumn = LastColumn to 0 Step - 1 
      'For Each DateCell In DateRange 
      Set DateCell = OUTSDATA.Cells(2,LastColumn) 
       With DateCell 
        If .Value <> "" Then 
         If .Offset(0, 1).Value <> .Value + 1 And .Offset(0, 1).Value <> .Value Then 
          .Offset(0, 1).EntireColumn.Insert 
          .EntireColumn.Copy Destination:=.Offset(-1, 1) 
          .Offset(0, 1).Value = .Offset(0, 1).Value + 1 
         End If 
        End If 
       End With 
      Set DateCell = Nothing 
     Next  
    Set DateRange = Nothing  
Set OUTSDATA = Nothing 
End Sub 

(Dies ist nicht getestet, Verwendung als Beispiel anzupassen) hier Was passiert ist, dass LastColumn ist war 10, dann beginnt die Schleife bei zehn, und die nächste Iteration ist bis 9, dann 8, etc ...

+0

Kein Problem, wenn ich eine Formel gegeben hätte, die jemand einfach kopiert und in eine Antwort ohne weitere Erklärung eingefügt hat, wäre ich sauer, aber du hast erklärt, was gesagt und gezeigt wurde Wie. –

+1

Vielen Dank @Gary! Das hat mich auf den richtigen Weg gebracht! Hätte nie gedacht, so nach hinten zu arbeiten. Die einzige Sache ist, dass ich den Code ein wenig zwicken musste, um alle ".offset (0,1)" Vorkommen zu ändern, um "Offset (0, -1)" zu berücksichtigen, um rückwärts zu gehen. – mynameisgooch