从大量电子表格中读取溢出

我正在使用Excel 2007,处理大型数据的大网格数据集。 我经常(每个月)每天/每月处理64000个元素的平面二进制文件,但在excel中有这个大气数据,因为它来自NetCDF源文件(我已经得到了这个数据的附加信息)。

我使用Workbooks.Open方法打开所需的Excel电子表格。

我最初使用“Set OpenedWorkBook = Workbooks.Open(Filename)”来打开工作簿,然后使用“OpenedWorkbook.Worksheets(”air“)从工作簿中读取数据单元格(Lat + 3 +(94 * DayNum),Lon + 3).Value“,即使用对象OpenedWorkbook。

当94 * DayNum进入DayNum = 349时,这是崩溃的,即32806(数据是每天94行)。 认识到这是超过2 ^ 15(32768)我推测有一些奇怪的关于对象Workbooks.Open返回,即对细胞function的限制。 所以我尝试使用方法“OpenedWorkBook.Activate”和访问现在活动打开工作表没有明确参考工作簿。 对于同样的溢出,我仍然在同一时间发生崩溃。

奇怪的是,如果我使用我的代码的电子表格中的示例表,并且只是debug.print的值,我可以跨越2 ^ 15的限制,并打印出远远超过该限制的行的值。 知道这一点,我可以通过将代码复制/粘贴到每个源工作簿来转换为中间平面二进制文件,但其中有36个,如果我能避免,我宁愿不这样做。

所以,在我开始搞乱我的数据转换为平面的二进制文件之前,任何人都可以提出这里可能会发生什么?

与其他编程语言相比,VBA中的整数数据types的上限为32,767。 这表明你的一个variables( LatDayNum或者Lon )已经被声明为一个整数types。 数字32,768明显地破坏了这个上边界并且导致溢出,因为VBA中的整数数据types具有16位的最大限制。 如果您正在使用整数,请改为使用数据types。 VBA中的长数据types可以保存高达2,147,483,647的值,因为它分配了32位内存。

承认有点矫枉过正的答案,但希望应该解释为什么你可能想使用Long数据types而不是Integer数据types。