![]() |
Overflow error.. why?
Dim x As Long x = 2000 * 365 Why is this statment generate a : Overflow (Error 6) I dont understant it since x is "long" and should be able to store this large number. Could someone please try to explain it. I know that the statement under will solve it. Dim x As Long x = CLng(2000) * 365 Best regards Petter Bøhler |
Overflow error.. why?
When doing its intermediate calculations, VBA uses the smallest data type
that it can to hold the variables. Since both 2000 and 365 can be stored in Integers, VBA uses integers in its internal calculations. But 2000 * 365 = 730000 exceeds the maximum value of an integer, thus you get the "Overflow" error. You can force VBA to use Longs by suffixing one of the operands with the Long type definition character '&'. E.g., Dim x As Long x = 2000& * 365 -- Cordially, Chip Pearson Microsoft MVP - Excel www.cpearson.com (email address is on the web site) "Fingerjob" wrote in message ... Dim x As Long x = 2000 * 365 Why is this statment generate a : Overflow (Error 6) I dont understant it since x is "long" and should be able to store this large number. Could someone please try to explain it. I know that the statement under will solve it. Dim x As Long x = CLng(2000) * 365 Best regards Petter Bøhler |
Overflow error.. why?
Thx.
That was very helpfull. Best regards Petter. :-) Chip Pearson skrev: When doing its intermediate calculations, VBA uses the smallest data type that it can to hold the variables. Since both 2000 and 365 can be stored in Integers, VBA uses integers in its internal calculations. But 2000 * 365 = 730000 exceeds the maximum value of an integer, thus you get the "Overflow" error. You can force VBA to use Longs by suffixing one of the operands with the Long type definition character '&'. E.g., Dim x As Long x = 2000& * 365 -- Cordially, Chip Pearson Microsoft MVP - Excel www.cpearson.com (email address is on the web site) "Fingerjob" wrote in message ... Dim x As Long x = 2000 * 365 Why is this statment generate a : Overflow (Error 6) I dont understant it since x is "long" and should be able to store this large number. Could someone please try to explain it. I know that the statement under will solve it. Dim x As Long x = CLng(2000) * 365 Best regards Petter Bøhler |
Overflow error.. why?
Chip: Is 2000& better than CLng (2000)? Is the former done at compile
time, and therefore not calling to a function? Dom Chip Pearson wrote: When doing its intermediate calculations, VBA uses the smallest data type that it can to hold the variables. Since both 2000 and 365 can be stored in Integers, VBA uses integers in its internal calculations. But 2000 * 365 = 730000 exceeds the maximum value of an integer, thus you get the "Overflow" error. You can force VBA to use Longs by suffixing one of the operands with the Long type definition character '&'. E.g., Dim x As Long x = 2000& * 365 -- Cordially, Chip Pearson Microsoft MVP - Excel www.cpearson.com (email address is on the web site) "Fingerjob" wrote in message ... Dim x As Long x = 2000 * 365 Why is this statment generate a : Overflow (Error 6) I dont understant it since x is "long" and should be able to store this large number. Could someone please try to explain it. I know that the statement under will solve it. Dim x As Long x = CLng(2000) * 365 Best regards Petter Bøhler |
Overflow error.. why?
Yes, 2000& is better than CLng(2000) for the reason you suspect. 2000& is
made a Long at compile time, and CLng is a function call done at run time. -- Cordially, Chip Pearson Microsoft MVP - Excel www.cpearson.com (email address is on the web site) wrote in message oups.com... Chip: Is 2000& better than CLng (2000)? Is the former done at compile time, and therefore not calling to a function? Dom Chip Pearson wrote: When doing its intermediate calculations, VBA uses the smallest data type that it can to hold the variables. Since both 2000 and 365 can be stored in Integers, VBA uses integers in its internal calculations. But 2000 * 365 = 730000 exceeds the maximum value of an integer, thus you get the "Overflow" error. You can force VBA to use Longs by suffixing one of the operands with the Long type definition character '&'. E.g., Dim x As Long x = 2000& * 365 -- Cordially, Chip Pearson Microsoft MVP - Excel www.cpearson.com (email address is on the web site) "Fingerjob" wrote in message ... Dim x As Long x = 2000 * 365 Why is this statment generate a : Overflow (Error 6) I dont understant it since x is "long" and should be able to store this large number. Could someone please try to explain it. I know that the statement under will solve it. Dim x As Long x = CLng(2000) * 365 Best regards Petter Bøhler |
All times are GMT +1. The time now is 09:47 PM. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com