2016-07-25 19 views
0

Ich schrieb ein VB-Makro in Excel, um ein "Autotest" Arbeitsblatt aktiv zu setzen und die Zelle mit der genauen Übereinstimmung "Datum" zu aktivieren. Dann wechsle ich jedes Datum unter dieser Zelle, um den Jahreswert vor 4 Jahren zu erhöhen. Ich habe viele Datensätze, also wollte ich, dass dies unabhängig vom Format der Arbeitsbücher funktioniert. Ich weiß, dass es immer einen "Autotest" -Blatt geben wird und ich weiß, dass es immer eine Zelle "Datum" über der Liste der Daten geben wird. Dieser Code funktioniert für die meisten Datensätze, aber ich bekomme diesen Fehler, das Debug-Punkte auf die lastrow-Anweisung, aber ich kann das Problem nicht feststellen. Danke im Voraus.Laufzeitfehler empfangen '1004' Anwendungsdefinierter oder objekterweiterter Fehler

Sub FourYrsAhead() 

    ' FourYrsAhead Macro 
    ' This macro will forward all of the dates under the "Dates" column in the Autotest sheet forward 4 years. 

'Sets variable lastRow as an integer 
Dim lastRow As Integer 
'Sets theSheetImWorkingOn as a worksheet variable 
Dim theSheetImWorkingOn As Worksheet 
'Sets theColumnNumberForTheDates as an integer 
Dim theColumnNumberForTheDates As Integer 

'Activates the Autotest worksheet as the active sheet 
Worksheets("Autotest").Activate 

'Finds the exact string 'Date' and makes it the active cell 
Cells.Find(What:="Date", LookAt:=xlWhole).Activate 

'Sets the column number to the current active call value 
theColumnNumberForTheDates = ActiveCell.Column 

'Sets the sheet that will be worked on 
Set theSheetImWorkingOn = Sheets("Autotest") 

'Sets the last row variable 
lastRow = theSheetImWorkingOn.Cells(1000000, theColumnNumberForTheDates).End(xlUp).Row 

'For loop that starts as the active cell row plus 1 and loops down each row 
For x = ActiveCell.Row + 1 To lastRow 

    'Changes the yyyy value in each row ahead 4 years 
    theSheetImWorkingOn.Cells(x, theColumnNumberForTheDates) = DateAdd("yyyy", 4, theSheetImWorkingOn.Cells(x, theColumnNumberForTheDates)) 

'Moves to the next row 
Next x 

End Sub 
+0

Fehler 1004 bedeutet immer eine Variable existiert nicht oder ist nicht definiert. Wenn Sie sich im Debug-Modus befinden, bewegen Sie den Mauszeiger über Ihre Variablen. Ich wette, Sie werden feststellen, dass 'theColumnNumberForTheDates' keine gültige Referenz ist. (Es ist wahrscheinlich auf ein anderes Blatt zeigen ... Siehe diesen Thread: http://StackOverflow.com/Questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) – Tim

+0

@Tim Wenn ich Bewegen Sie den Mauszeiger über theColumnNumberForTheDates, es hat einen definierten Wert von "4" was korrekt ist, da die 'Date'-Zelle sich in der 4. Spalte befindet –

+0

@PhilippeGrondier Ich habe den Code aus einem Tutorial online gefunden, ich dachte, der Datensatz würde niemals reichen diese nummer und der code scheint mit den meisten datensätzen zu funktionieren, die ich so idk habe, warum es hier nicht funktioniert. –

Antwort

0

Je nachdem, welche Version von Excel Sie ausführen, ist es möglich, dass Sie das Zeilenlimit von Excel überschreiten. In 2003 und früheren Versionen sind die Blätter auf 65536 Zeilen beschränkt, so dass der Aufruf der 1.000.000sten Zeile in Cells einen Fehler verursacht. Wenn Sie 2007 oder später ausführen, sollte dies jedoch nicht das Problem sein.

Mit YourSheet.Rows.Count statt 1000000 wird Arbeitsmappe Typ vermeiden diesen Fehler verursacht, während immer noch alle Daten zu gewährleisten abgedeckt ist

+0

Danke, das ist es .. Ich führe 2016 Excel, aber die Dateien, die das Problem haben, ist Typ: Microsoft Excel 97-2003.Ich muss sie als ein neues Excel-Blatt resave.Thanks! –

+0

@JordanWood Alternativ, verwenden Sie einen kleineren Wert als 1 Million (vielleicht 65535?) – RGA

+0

Danke, das funktioniert auch. Meine Firma hat Excel durchgehend aktualisiert obwohl es am besten ist, diese sowieso auf .xlsx zu aktualisieren. –