将宏输出拆分为多个工作表

时间:2015-10-30 15:04:32

标签: excel excel-vba vba

我有一个运行数据的宏,并以特定格式将其输出到另一个工作表。问题是,在填充了第65,536行之后出错了,我猜测这是MS强加的限制:

SELECT * 
from rawdata.getNumbersForUserBasedMetricEventsGroupedByClient('2015-09-28','2015-10-28','{4}'::int[],2,null,null,null,null,null); 

我可以在这个宏中添加什么,所以当它达到65,536的这个限制时,它会创建一个新的工作表并继续运行?

1 个答案:

答案 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