VBA 运行时错误‘6’,溢出

时间:2022-11-17 13:07:52
我从数据空中间查询了近7W的数据,向工作表里面插入数据,每行插入9个,循环插入,在插入到工作表里面的时候,当插入到32767行的时候提示溢出,溢出的原因是列变成了10列
部分代码如下
Do While Not rs.EOF
        For j = 0 To UBound(head)
            mySheet.Cells(curRow, j + 1) = rs(head(j))
        Next j
        curRow = curRow + 1
        n = n + 1
        rs.MoveNext
        If n > 65535 Then
            i = i + 1
            If Not SheetExists(objname & i) Then
                Call CreateSheet(objname, i)
            End If
            Set mySheet = Worksheets(objname & i)
            mySheet.Cells.Clear
            Call showhead(mySheet, head)
            curRow = 2
            n = 0
        End If
    Loop
其中UBound的最大值是8,但是当curRow为32767的时候,提示溢出,看j编程了9
请教怎么解决问题。

6 个解决方案

#1


For j = 0 To UBound(head)
修改为
For j = LBound(head) To UBound(head)

试试

#2


谢谢,知道是什么原因了,还想请教一下,怎么把某一列变成是日期格式,因为我从数据库里面取出来的数据是:2011/08/01 11:12:01这种形式的,需要怎么转化才能在工作表中正确的显示?

#3


引用 2 楼 honghuabin 的回复:
谢谢,知道是什么原因了,还想请教一下,怎么把某一列变成是日期格式,因为我从数据库里面取出来的数据是:2011/08/01 11:12:01这种形式的,需要怎么转化才能在工作表中正确的显示?

把数据格式化一下.yyyy-m-d hh:mm:ss.

#4


如楼上所说,
如果你的数据库中的数据是日期型的,那么用格式化函数就可以搞定了,format函数,用法自己查一下吧。

如果你数据库中是字符串格式,那么就需要特殊的字符串处理了。

至于excel的显示,只是一个显示样子而已,不管你是日期还是字符串,显示对了就成了。
如果你的excel单元格还要参与运算,才需要把样式格式设置的符合你的要求。

引用 3 楼 bitls 的回复:
引用 2 楼 honghuabin 的回复:

谢谢,知道是什么原因了,还想请教一下,怎么把某一列变成是日期格式,因为我从数据库里面取出来的数据是:2011/08/01 11:12:01这种形式的,需要怎么转化才能在工作表中正确的显示?

把数据格式化一下.yyyy-m-d hh:mm:ss.

#5


我想的一种办法是,将取出来的数据全部转化成字符串的形式,然后显示出来,这样应该就不会出问题了把!  但是不知道这样行不行,代码也不知道怎么写,还要请教大家帮忙啊!

#6


举个日期字段的例子:
如果你的数据库中的数据存储就是date类型的,那么从recordset中获取的数据,要经过format格式赋值给单元格的value或者text属性,如下:
mySheet.Cells(curRow, j + 1).text = format(rs(head(j)),"YYYY-MM-DD HH:MM:SS")



引用 5 楼 honghuabin 的回复:
我想的一种办法是,将取出来的数据全部转化成字符串的形式,然后显示出来,这样应该就不会出问题了把! 但是不知道这样行不行,代码也不知道怎么写,还要请教大家帮忙啊!

#1


For j = 0 To UBound(head)
修改为
For j = LBound(head) To UBound(head)

试试

#2


谢谢,知道是什么原因了,还想请教一下,怎么把某一列变成是日期格式,因为我从数据库里面取出来的数据是:2011/08/01 11:12:01这种形式的,需要怎么转化才能在工作表中正确的显示?

#3


引用 2 楼 honghuabin 的回复:
谢谢,知道是什么原因了,还想请教一下,怎么把某一列变成是日期格式,因为我从数据库里面取出来的数据是:2011/08/01 11:12:01这种形式的,需要怎么转化才能在工作表中正确的显示?

把数据格式化一下.yyyy-m-d hh:mm:ss.

#4


如楼上所说,
如果你的数据库中的数据是日期型的,那么用格式化函数就可以搞定了,format函数,用法自己查一下吧。

如果你数据库中是字符串格式,那么就需要特殊的字符串处理了。

至于excel的显示,只是一个显示样子而已,不管你是日期还是字符串,显示对了就成了。
如果你的excel单元格还要参与运算,才需要把样式格式设置的符合你的要求。

引用 3 楼 bitls 的回复:
引用 2 楼 honghuabin 的回复:

谢谢,知道是什么原因了,还想请教一下,怎么把某一列变成是日期格式,因为我从数据库里面取出来的数据是:2011/08/01 11:12:01这种形式的,需要怎么转化才能在工作表中正确的显示?

把数据格式化一下.yyyy-m-d hh:mm:ss.

#5


我想的一种办法是,将取出来的数据全部转化成字符串的形式,然后显示出来,这样应该就不会出问题了把!  但是不知道这样行不行,代码也不知道怎么写,还要请教大家帮忙啊!

#6


举个日期字段的例子:
如果你的数据库中的数据存储就是date类型的,那么从recordset中获取的数据,要经过format格式赋值给单元格的value或者text属性,如下:
mySheet.Cells(curRow, j + 1).text = format(rs(head(j)),"YYYY-MM-DD HH:MM:SS")



引用 5 楼 honghuabin 的回复:
我想的一种办法是,将取出来的数据全部转化成字符串的形式,然后显示出来,这样应该就不会出问题了把! 但是不知道这样行不行,代码也不知道怎么写,还要请教大家帮忙啊!