将macros输出分割成多个工作表

我有一个macros,通过数据运行,并以特定的格式输出到不同的工作表。 问题是,在行65,536已经被填充之后,它出错了,我猜是MS的一个限制:

Sub Macro1() ' ' Macro1 Macro ' ' Sheets.Add.Name = "Sheet2" Worksheets("Sheet2").Cells(1, 1).Value = "datacol1" Worksheets("Sheet2").Cells(1, 2).Value = "datacol2" Worksheets("Sheet2").Cells(1, 3).Value = "datacol3" Worksheets("data").Activate SourceColumn = 2 SourceRow = 2 Cells(SourceRow, 1).Activate targetRow = SourceRow targetcolumn = 1 While Cells(1, SourceColumn).Value <> "" While ActiveCell.Value <> "" Worksheets("Sheet2").Cells(targetRow, targetcolumn).Value = ActiveCell.Value Worksheets("Sheet2").Cells(targetRow, targetcolumn + 1).Value = Worksheets("Data").Cells(1, SourceColumn).Value Worksheets("Sheet2").Cells(targetRow, targetcolumn + 2).Value = Worksheets("Data").Cells(SourceRow, SourceColumn).Value SourceRow = SourceRow + 1 targetcolumn = 1 targetRow = targetRow + 1 Cells(SourceRow, 1).Activate Wend SourceColumn = SourceColumn + 1 SourceRow = 2 Cells(SourceRow, 1).Activate Wend With Worksheets("Sheet2").Sort .SetRange Range(Cells(2, 1), Cells(targetRow, 3)) .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub 

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

我不认为这是一个Excel的限制。 我认为问题是你的variables是未定义的,所以VBA正在使用一个不足以处理你所给的行号的数据types来进行最好的猜测。 通过改变数据types,我认为你会解决你的问题。

作为示范,这应该解决这两个问题。 为了说明的目的,我把表格分成了10万行(而不是65K表示它将起作用),但是你可以把它改成1,000,000或者任何真正的限制。 我做了10万只是为了certificate它是分裂的。

 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