我有一个运行数据的宏,并以特定格式将其输出到另一个工作表。问题是,在填充了第65,536行之后出错了,我猜测这是MS强加的限制:
SELECT *
from rawdata.getNumbersForUserBasedMetricEventsGroupedByClient('2015-09-28','2015-10-28','{4}'::int[],2,null,null,null,null,null);
我可以在这个宏中添加什么,所以当它达到65,536的这个限制时,它会创建一个新的工作表并继续运行?
答案 0 :(得分:1)
我认为这不是Excel的限制。我认为问题是你的变量是未定义的,所以VBA使用的数据类型不足以处理你给它的行号。通过将数据类型更改为long
,我认为您将解决问题。
作为示范,这应该解决这两个问题。为了便于说明,我将工作表拆分为100,000行(而不是65k以显示它可以工作),但您可以将其更改为1,000,000或任何实际限制。为了证明它确实分裂,我把它变成了100,000。
Sub Macro1()
Dim wsFrom, wsTo As Worksheet
Dim SourceRow, SheetNumber, TargetRow As Long
Dim val As String
Set wsFrom = Worksheets("data")
SheetNumber = 2
SourceRow = 2
val = wsFrom.Cells(SourceRow, 1).Text
While val <> ""
Sheets.Add.Name = "Sheet" & SheetNumber
Set wsTo = Worksheets("Sheet" & SheetNumber)
wsTo.Cells(1, 1).Value = "datacol1"
wsTo.Cells(1, 2).Value = "datacol2"
wsTo.Cells(1, 3).Value = "datacol3"
TargetRow = 2
While val <> "" And TargetRow < 100000
wsTo.Cells(TargetRow, 1).Value = wsFrom.Cells(SourceRow, 1).Value
wsTo.Cells(TargetRow, 2).Value = wsFrom.Cells(SourceRow, 2).Value
wsTo.Cells(TargetRow, 3).Value = wsFrom.Cells(SourceRow, 3).Value
SourceRow = SourceRow + 1
TargetRow = TargetRow + 1
val = wsFrom.Cells(SourceRow, 1).Text
Wend
' insert your sort logic here
SheetNumber = SheetNumber + 1
Wend
End Sub