我正在创建一个程序,显示一天中的秒数(86400),这意味着将以该格式从00:00:01到59:59:59显示86400行数据。但是我收到运行时错误:溢出。因此,我假设我需要使用多个列来收集这些数据 - 如果是这样,我该怎么做?
Private Sub mythirdlesson()
Dim wks As Worksheet
Dim s As Integer
Dim m As Integer
Dim h As Long
Dim cellrow As Integer
Set wks = ThisWorkbook.Worksheets("Library")
cellrow = 1
For h = 0 To 59
For m = 0 To 59
For s = 0 To 59
wks.Cells(cellrow, 1) = h & ":" & m & ":" & s
cellrow = cellrow + 1
Next
Next
Next
End Sub
答案 0 :(得分:3)
问题不在于Excel行,而在于cellrow
数据类型。我把它改成了很长时间,它没有问题。另请注意,您的脚本在一天中计算的设计错误为60小时而不是24小时。请考虑更正后的脚本:
Private Sub mythirdlesson()
Dim wks As Worksheet
Dim s As Integer
Dim m As Integer
Dim h As Long
Dim cellrow As Long
Set wks = ThisWorkbook.Worksheets("Library")
cellrow = 1
For h = 0 To 23
For m = 0 To 59
For s = 0 To 59
wks.Cells(cellrow, 1) = h & ":" & m & ":" & s
cellrow = cellrow + 1
Next
Next
Next
End Sub
此致
答案 1 :(得分:1)
使用数组总是更快。下面的代码在我的电脑上在0.4秒内填充了86400行,而wks.Cells(cellrow, 1) = h & ":" & m & ":" & s
方法则为5.3秒:
Sub TestFill86400()
Dim filler(1 To 86400, 1 To 1) As Date
Dim i As Long
For i = 1 To 86400
filler(i, 1) = (i - 1) / 86400
Next
With ThisWorkbook.Worksheets("Library")
With .Range(.Cells(1, 1), .Cells(86400, 1))
.Value = filler
.NumberFormat = "hh:mm:ss"
End With
End With
End Sub
答案 2 :(得分:0)
您可以转换为.xlsx,.xlsm和.xlsb工作簿吗?它们每张纸的限制为1048576行。
此外,您必须将CellRow
的数据类型更改为LONG
。
如果你仍然需要将它分成多个列,你可以使用模块化的opreations ......像这样:
Private Sub mythirdlesson()
Dim wks As Worksheet
Dim s As Integer
Dim m As Integer
Dim h As Long
Dim cellrow As Long
Set wks = ThisWorkbook.Worksheets("Sheet1")
cellrow = 0
For h = 0 To 24
For m = 0 To 59
For s = 0 To 59
wks.Cells(cellrow Mod 65536 + 1, cellrow \ 65536 + 1) = h & ":" & m & ":" & s
cellrow = cellrow + 1
Next
Next
Next
End Sub
答案 3 :(得分:0)
我意识到你正在练习练习和学习VBA。这是一个关于速度的好教训。看看写出86400时间值需要多长时间,就像你在本练习中所做的那样。
这是我怎么做的。完成需要大约十分之一秒:
Private Sub FastTimes()
[d:d].NumberFormat = "hh:mm:ss"
[d1:d86400] = [row(1:86400)/86400]
End Sub