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

标签 excel vba

我有一个宏,它运行数据并将其以特定格式输出到不同的工作表。问题是,在填充第 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  

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

最佳答案

我不认为这是 Excel 的限制。我认为问题是您的变量未定义,因此 VBA 使用不足以处理您提供的行号的数据类型进行最佳猜测。通过将数据类型更改为long,我认为您将解决您的问题。

作为演示,这应该可以解决这两个问题。出于说明目的,我将工作表分割为 100,000 行(而不是 65k 以显示它可以工作),但您可以将其更改为 1,000,000 或任何实际限制。我把它设为 100,000 只是为了证明它确实会 split 。

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

关于excel - 将宏输出拆分为多个工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33439044/

相关文章:

sql - ADO Connection.Execute 不断返回关闭的记录集

excel - VBA 编辑器中的 Unicode 语言支持

excel - _xlfn.IFERROR Excel2013删除

excel - 使用 Apache POI 库在 Excel 工作表中添加饼图?

excel - 如何在 MyVlookup 函数中使用通配符?

excel - 如何将变量分配给数据验证公式 1 := in Excel VBA?

vba - 应用程序定义或对象定义的错误 Excel

excel - 基于多变量的 VBA 案例选择

xml - 从 OpenXml Excel 文件中读取日期

regex - 这是用于匹配 Excel 公式中任何单元格引用的正则表达式吗?