我正在使用Excel 2007,处理大气数据的大型网格化数据集。我经常(每个月)处理每天每月64000个元素的平面二进制文件,但是这个大气数据是excel,因为它来自NetCDF源文件(我已经为这些数据添加了转换)。
我使用Workbooks.Open方法打开所需的Excel电子表格。
我最初使用“Set OpenedWorkBook = Workbooks.Open(Filename)”来打开工作簿,然后使用“OpenedWorkbook.Worksheets(”air“)从工作簿中读取数据。单元格(Lat + 3 +(94 * DayNum) ),Lon + 3)。值“,即使用对象OpenedWorkbook。
94 * DayNum越过DayNum = 349时崩溃,即32806(数据每天94行)。意识到这已超过2 ^ 15(32768)我假设对象Workbooks.Open有一些奇怪的返回,即对Cells函数的限制。所以我尝试使用方法“OpenedWorkBook.Activate”并访问现在活动的打开的工作表,而没有明确引用工作簿。对于相同的溢出,我仍然在同一点崩溃。
奇怪的是,如果我在代码的电子表格中使用示例表,并且只是调试。我可以跨越2 ^ 15限制并从远超过该限制的行打印出值。知道了这一点,我可以通过将代码复制/粘贴到每个源工作簿中来转换为中间平面二进制文件,但是其中有36个,如果我可以避免它,我宁愿不这样做。
所以,在我开始将我的数据转换为扁平二进制文件之前,有人可以建议可能会发生什么吗?
答案 0 :(得分:2)
与其他编程语言相比,VBA中的整数数据类型的上限为32,767。这表明您的一个变量(Lat
,DayNum
或Lon
)已被声明为整数类型。数字32,768显然会破坏此上限并导致溢出,因为VBA中的整数数据类型的最大限制为16位。如果您使用整数,则使用 Long 数据类型。 VBA中的长数据类型最多可以保存2,147,483,647,因为它分配了32位内存。
不可否认,这有点过分的答案,但希望能解释为什么你可能想要使用Long
数据类型而不是Integer
数据类型。