Excel 工作表排序规则溢出问题

Excel 工作表排序规则溢出问题,excel,vba,Excel,Vba,我试图将多个工作表中的所有数据合并到一个工作表中,但在它变得特别远之前,我遇到了一个“溢出”错误。。。当然有更好的方法来避免这个问题 Sub collateSheets() Dim ws As Worksheet Dim src As Worksheet Dim LR As Integer Dim LR2 As Integer Set ws = Sheets.Add With ws .Name = "Collated Data" .Range("1:1").Value = S

我试图将多个工作表中的所有数据合并到一个工作表中,但在它变得特别远之前,我遇到了一个“溢出”错误。。。当然有更好的方法来避免这个问题

Sub collateSheets()

Dim ws As Worksheet
Dim src As Worksheet
Dim LR As Integer
Dim LR2 As Integer

Set ws = Sheets.Add
With ws
    .Name = "Collated Data"
    .Range("1:1").Value = Sheets(2).Range("1:1").Value
End With
For i = 1 To Sheets.Count
    Sheets(i).Activate
    LR = ws.Cells(Rows.Count, 1).End(xlUp).Row
    LR2 = Sheets(i).Cells(Rows.Count, 1).End(xlUp).Row
    If LR2 <> 1 Then
        For j = 2 To LR2
            LRinput = LR - 1 + j
            ws.Rows(LRinput).Value = Sheets(i).Rows(j).Value
        Next j
    End If
    LR = vbNull
    LR2 = vbNull
Next i

End Sub
子页()
将ws设置为工作表
Dim src As工作表
作为整数的Dim LR
作为整数的Dim LR2
设置ws=Sheets.Add
与ws
.Name=“整理的数据”
.范围(“1:1”).值=表(2).范围(“1:1”).值
以
对于i=1到1张。计数
工作表(一)激活
LR=ws.Cells(Rows.Count,1).End(xlUp).Row
LR2=工作表(i).单元格(行数,1).结束(xlUp).行
如果是LR2 1,则
对于j=2至LR2
LRinput=LR-1+j
ws.Rows(lrinport).Value=Sheets(i).Rows(j).Value
下一个j
如果结束
LR=vbNull
LR2=vbNull
接下来我
端接头
您也在循环新的“整理数据”表

将其放在第一张纸上,并从第2张纸开始打印

此外,您可以避免在行中进行迭代,并一次性复制/粘贴它们的值

最后循环查看
工作表
集合,避免任何可能的图表:

Sub collateSheets()
    Dim ws As Worksheet
    Dim src As Worksheet
    Dim LR As Long, LR2 As Long
    Dim i As Long

    Set ws = Worksheets.Add(before:=Sheets(1)) ' place new sheet in first position
    With ws
        .Name = "Collated Data"
        .Range("1:1").value = Sheets(2).Range("1:1").value
    End With
    For i = 2 To Worksheets.Count ' loop from 2nd sheet on (thus avoiding "Collated Data")
        LR = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
        LR2 = Sheets(i).Cells(Sheets(i).Rows.Count, 1).End(xlUp).Row
        If LR2 <> 1 Then ws.Rows(LR + 1).Resize(LR2 - 1).value = Sheets(i).Rows("2:" & LR2).value
    Next
End Sub
子页()
将ws设置为工作表
Dim src As工作表
变暗LR长度相同,LR2长度相同
我想我会坚持多久
设置ws=Worksheets.Add(before:=Sheets(1))'将新工作表放在第一个位置
与ws
.Name=“整理的数据”
.范围(“1:1”).值=表(2).范围(“1:1”).值
以
对于i=2到工作表。从第二张工作表开始循环计数(从而避免“整理数据”)
LR=ws.Cells(ws.Rows.Count,1).End(xlUp).Row
LR2=工作表(i).单元格(工作表(i).行数,1).结束(xlUp).行
如果是LR2.1,那么ws.Rows(LR+1).Resize(LR2-1).value=Sheets(i).Rows(“2:&LR2.value
下一个
端接头
您也在循环新的“整理数据”表

将其放在第一张纸上,并从第2张纸开始打印

此外,您可以避免在行中进行迭代,并一次性复制/粘贴它们的值

最后循环查看
工作表
集合,避免任何可能的图表:

Sub collateSheets()
    Dim ws As Worksheet
    Dim src As Worksheet
    Dim LR As Long, LR2 As Long
    Dim i As Long

    Set ws = Worksheets.Add(before:=Sheets(1)) ' place new sheet in first position
    With ws
        .Name = "Collated Data"
        .Range("1:1").value = Sheets(2).Range("1:1").value
    End With
    For i = 2 To Worksheets.Count ' loop from 2nd sheet on (thus avoiding "Collated Data")
        LR = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
        LR2 = Sheets(i).Cells(Sheets(i).Rows.Count, 1).End(xlUp).Row
        If LR2 <> 1 Then ws.Rows(LR + 1).Resize(LR2 - 1).value = Sheets(i).Rows("2:" & LR2).value
    Next
End Sub
子页()
将ws设置为工作表
Dim src As工作表
变暗LR长度相同,LR2长度相同
我想我会坚持多久
设置ws=Worksheets.Add(before:=Sheets(1))'将新工作表放在第一个位置
与ws
.Name=“整理的数据”
.范围(“1:1”).值=表(2).范围(“1:1”).值
以
对于i=2到工作表。从第二张工作表开始循环计数(从而避免“整理数据”)
LR=ws.Cells(ws.Rows.Count,1).End(xlUp).Row
LR2=工作表(i).单元格(工作表(i).行数,1).结束(xlUp).行
如果是LR2.1,那么ws.Rows(LR+1).Resize(LR2-1).value=Sheets(i).Rows(“2:&LR2.value
下一个
端接头

我的代码创建一个名为“Output”的新工作表,并导入其中的所有数据

Option Explicit

    Sub test()

        Dim ws As Worksheet
        Dim wsNew As Worksheet
        Dim Lrow As Long
        Dim Excist As Boolean
        Dim SheetName As String

        SheetName = "Output"

        Excist = False

        For Each ws In ThisWorkbook.Sheets
            If ws.Name = "Output" Then
                Excist = True
                Set wsNew = ws
            End If
        Next

        If Excist = False Then
            Set wsNew = ThisWorkbook.Sheets.Add(After:= _
                ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
            wsNew.Name = SheetName
        End If

        For Each ws In ThisWorkbook.Sheets
            If ws.Name <> "Output" Then
                ws.UsedRange.Copy

                Lrow = wsNew.Cells(wsNew.Rows.Count, "A").End(xlUp).Row

                wsNew.Range("A" & Lrow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False
            End If
        Next

    End Sub
选项显式
子测试()
将ws设置为工作表
新建为工作表
暗淡的光线和长的一样
作为布尔的弱激子
将SheetName设置为字符串
SheetName=“输出”
激子=假
对于此工作簿中的每个ws.Sheets
如果ws.Name=“Output”,则
激子=真
设置wsNew=ws
如果结束
下一个
如果Excist=False,则
设置wsNew=thiswoolk.Sheets.Add(之后:=_
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
wsNew.Name=SheetName
如果结束
对于此工作簿中的每个ws.Sheets
如果ws.Name是“输出”,那么
ws.UsedRange.Copy
Lrow=wsNew.Cells(wsNew.Rows.Count,“A”).End(xlUp).Row
wsNew.Range(“A”&Lrow).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,skipblank_
:=假,转置:=假
如果结束
下一个
端接头

我的代码创建一个名为“Output”的新工作表,并导入其中的所有数据

Option Explicit

    Sub test()

        Dim ws As Worksheet
        Dim wsNew As Worksheet
        Dim Lrow As Long
        Dim Excist As Boolean
        Dim SheetName As String

        SheetName = "Output"

        Excist = False

        For Each ws In ThisWorkbook.Sheets
            If ws.Name = "Output" Then
                Excist = True
                Set wsNew = ws
            End If
        Next

        If Excist = False Then
            Set wsNew = ThisWorkbook.Sheets.Add(After:= _
                ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
            wsNew.Name = SheetName
        End If

        For Each ws In ThisWorkbook.Sheets
            If ws.Name <> "Output" Then
                ws.UsedRange.Copy

                Lrow = wsNew.Cells(wsNew.Rows.Count, "A").End(xlUp).Row

                wsNew.Range("A" & Lrow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False
            End If
        Next

    End Sub
选项显式
子测试()
将ws设置为工作表
新建为工作表
暗淡的光线和长的一样
作为布尔的弱激子
将SheetName设置为字符串
SheetName=“输出”
激子=假
对于此工作簿中的每个ws.Sheets
如果ws.Name=“Output”,则
激子=真
设置wsNew=ws
如果结束
下一个
如果Excist=False,则
设置wsNew=thiswoolk.Sheets.Add(之后:=_
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
wsNew.Name=SheetName
如果结束
对于此工作簿中的每个ws.Sheets
如果ws.Name是“输出”,那么
ws.UsedRange.Copy
Lrow=wsNew.Cells(wsNew.Rows.Count,“A”).End(xlUp).Row
wsNew.Range(“A”&Lrow).Paste特殊粘贴:=xlPasteValues,操作:=xlNone,skipblank_
:=假,转置:=假
如果结束
下一个
端接头

使用
Long
而不是
Integer
,因为假设这是问题所在,那么后者只会上升到大约32k Am,尽管可能是其他问题。dang这是我第一次达到Integer的极限!使用
Long
而不是
Integer
,因为后者只会上升到大约32k Am,假设这就是问题所在,尽管可能是其他问题。dang这是我第一次达到整数的极限!这看起来不错,但它使用了“复制和粘贴”,街上的一句话是,这比value=value方法慢。所以我一直在寻找避免复制和粘贴的方法,但是当范围的维度可变时,我就遇到了麻烦,因为我不能说ws1.range(“A1:A10”).value=ws2.range(“A1:A10”).value,如果它每次都要更改的话。幸运的是,我可以在这个例子中复制整行,但我愿意打赌有一个计算速度更快的解决方案。。。它与resize有关这看起来不错,但它使用了复制粘贴,而街上的流行语是这比value=value方法慢。所以我很高兴