2017-04-25 3 views
0

Ich habe ein Makro, das ausgeführt wird, wenn die Excel-Arbeitsmappe geöffnet wird, und im Grunde nimmt Daten von einem Register „aktuelle Tages“ genannt und verschiebt sie in „Vortages“ und dann nehme Daten aus einer anderen Arbeitsmappe und fügt sie in den aktuellen Tag ein (verwendet tatsächlich range.value nicht kopieren/einfügen). Alles lief gut für mehrere Tests über mehrere Tage hinweg. Jetzt wird jedoch ein Overflow Error für den Range.Value-Teil des Codes ausgelöst. Dies ist definitiv nicht eine Größe Problem, da der Code:Excel VBA „Überlauf“ Fehler auf Range.Value Einstellung

PrevDay.Range("A1:Q" & ScoreCurRows).Value = CurrDay.Range("A1:Q" & ScoreCurRows).Value 

Wo ScoreCurRows als Lang deklariert wird und zieht die Usedrange von dem „Current Day“ Blatt und PrevDay wird als Sheets definiert („letzten Tag“) und CurrDay ist als Sheets ("Current Day") definiert. Es ist auch in der Regel weniger als 20 Zeilen Daten, also selbst wenn es eine ganze Zahl war, sollte dies immer noch kein Problem verursachen.

Hat jemand eine Idee, warum dies plötzlich einen Überlauffehler wirft und wenn es etwas gibt, ich suchen soll?

+1

Wie genau ist 'ScoreCurRows' definiert? – SJR

+1

'Debug.Print ScoreCurRows' was ist der Wert, wenn es abstürzt? –

+0

Es ist 17 .. Satz ScoreCurRows = Sheets („Aktuelle Tag“). UsedRange.Rows.Count ... keinen Sinn macht es zu einem Überlauf zu sein, auch nicht einmal in der Nähe ist, wenn es eine ganze Zahl – MattE

Antwort

1

Sie müssen einige Werte im Quellbereich haben, der den Überlauf verursacht, wenn VBA versucht, sie in eine Variante Array zu laden in

= CurrDay.Range("A1:Q" & ScoreCurRows).Value 

zum Beispiel eine Zelle als Datum mit einem Wert formatiert das ist zu groß für ein Date. Aus diesem Grund verwenden Sie stattdessen .Value2, die die Daten als normale Zahlen zurückgeben, ohne zu versuchen, sie zu konvertieren. Außerdem, obwohl die meisten Beiträge auf SO halten sich nicht an diese Regel, ist es bekannt immer verwenden .Value2 beim Lesen eines Bereichs Wert (nicht unbedingt beim Zuweisen).

PrevDay.Range("A1:Q" & ScoreCurRows).Value = CurrDay.Range("A1:Q" & ScoreCurRows).Value2 
'                     ^^^^^^