2017-04-25 43 views
0

Excelワークブックを開いたときに実行されるマクロがあり、基本的に「現在の日」というタブからデータを取り出して「前日」に移動してから現在の日付に貼り付けます(実際にはrange.valueをコピー/貼り付けはしません)。数日間にわたる複数のテストですべてがうまくいきました。ただし、コードのRange.Value部分にオーバーフローエラーがスローされています。コードがあるので、これは間違いなく、サイズの問題ではありません。Range.Valueの設定でExcel VBAの "オーバーフロー"エラーが発生する

ScoreCurRowsロングとして宣言し、「現在の日」のシートとPrevDayからUsedRangeを引っ張る
PrevDay.Range("A1:Q" & ScoreCurRows).Value = CurrDay.Range("A1:Q" & ScoreCurRows).Value 

はシート(「前の日」)として定義され、 CurrDayはSheets( "Current Day")として定義されています。また、通常は20行分のデータしかないため、整数であっても問題は発生しません。

なぜこれが突然オーバーフローエラーを投げているのか、誰かが私が探しているものがあるかどうか考えている人はいますか?

+1

「ScoreCurRows」はどのように定義されていますか? – SJR

+1

'Debug.Print ScoreCurRows'クラッシュ時の値は何ですか? –

+0

これは17です.. ScoreCurRows = Sheets( "Current Day")。UsedRange.Rows.Count ...整数であってもオーバーフローしないようにも意味がありません。 – MattE

答えて

1

あなたはVBAが例えば

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

にバリアント配列にロードしようとしたときにオーバーフローを引き起こしたソース領域、値と日付としてフォーマット細胞におけるいくつかの値を有していなければなりませんそれは日付のためには大きすぎます。このため、代わりに.Value2を使用してください。通常の数字として変換することなく日付が返されます。また、SOのdoncttのほとんどの投稿はこのルールに固執していますが、には常にを使用することがよく知られています。値(割り当て時に必ずしも必要ではありません)。

PrevDay.Range("A1:Q" & ScoreCurRows).Value = CurrDay.Range("A1:Q" & ScoreCurRows).Value2 
'                     ^^^^^^ 
関連する問題