2015-10-13 39 views
2

以下是我的程序的一部分,它具有下列功能

它将查看列K和列L并根据组合创建制表符。例如,如果K列的单元格值为“Apple”,而L列的单元格值为“Orange”,则它将创建一个标签1)Apple - Orange当列没有不同的值时,运行时错误13

新选项卡将包含具有此组合的所有行 因此,一次完成宏的运行,整个数据将根据K-L组合划分到不同的选项卡

我的问题是当整列K或整列L只有一个值时,会给出运行时错误。例如,如果整个K列有10行,并且所有列k个单元格都具有值Apple,则会发生错误。这同样适用于列L.

Dim m As Integer 
Dim area As Range 
Count = Range("K:K").SpecialCells(xlLastCell).Row 
ActiveSheet.Range("K2:K" & Count).AdvancedFilter Action:=xlFilterCopy, 
CopyToRange:=ActiveSheet.Range("Z2"), Unique:=True 

Columns(26).RemoveDuplicates Columns:=Array(1) 


Count1 = Range("L:L").SpecialCells(xlLastCell).Row 
ActiveSheet.Range("L2:L" & Count1).AdvancedFilter Action:=xlFilterCopy,  
CopyToRange:=ActiveSheet.Range("Y2"), Unique:=True 
Columns(25).RemoveDuplicates Columns:=Array(1) 
Dim arrayv As String 

Dim Text1 As String 

Dim arrayv1 As String 

last = Range("Z2").End(xlDown).Row 

arrayv = WorksheetFunction.Transpose(Sheets(1).Range("Z2:Z" & last).Value) 


last1 = Range("Y2").End(xlDown).Row 

arrayv1 = WorksheetFunction.Transpose(Sheets(1).Range("Y2:Y" & last1).Value) 

Columns(26).EntireColumn.Delete 
Columns(25).EntireColumn.Delete 

Dim i As Long, j As Long 
Dim flag As Variant 
flag = 1 

A = 1 
s = 2 
For c = 1 To UBound(arrayv1) 

For t = 1 To UBound(arrayv) 

Sheets.Add().Name = "Sheet" & s 
ActiveSheet.Move After:=Sheets(ActiveWorkbook.Sheets.Count) 

With Worksheets("Sheet1") 
j = 2 
.Rows(1).Copy Destination:=Worksheets("Sheet" & s).Range("A" & 1) 
flag = 1 
For i = 2 To Count 
    If .Cells(i, 11).Value = arrayv(t) Then 
    If .Cells(i, 12).Value = arrayv1(c) Then 
    Text = .Cells(i, 15).Value 


    flag = 0 

      .Rows(i).Copy Destination:=Worksheets("Sheet" & s).Range("A" & j) 


      j = j + 1 
      End If 

    End If 
    Next i 

    If flag = 1 Then 

    Sheets("Sheet" & s).Delete 

    Else 

    Text1 = Left(Text, 4) 

错误线时K列只有一个值

arrayv = WorksheetFunction.Transpose(Sheets(1).Range("Z2:Z" & last).Value) 

错误线时L列只有一个值

arrayv1 = WorksheetFunction.Transpose(Sheets(1).Range("Y2:Y" & last1).Value) 
+0

它看起来像* last *和/或* last1 *引用1,048,576行。试图'.Transpose' Y2:Y1048576超过变调功能限制(我认为这为65,536)。 – Jeeped

+0

更改您的阵列不是变体的字符串 –

回答

0

如果只有一个值Y2或Z2向下然后使用Range,End propertyxlDown一个xlDirection将要参考行1,048,576。 WorksheetFunction.Transpose method限制为65,536。任何超过此限制的结果将导致:

运行时错误“13”:
类型不匹配。

xlUp的最后一行查找的方向改为从底部查找。

last = Range("Z" & rows.count).End(xlUp).Row 
arrayv = WorksheetFunction.Transpose(Sheets(1).Range("Z2:Z" & last).Value) 


last1 = Range("Y" & rows.count).End(xlUp).Row 
arrayv1 = WorksheetFunction.Transpose(Sheets(1).Range("Y2:Y" & last1).Value) 
+0

感谢信息。我用x1Up更改了代码并运行。仍具有相同的错误,但现在该行是 当c = 1要UBound函数(arrayv1) – Dev

+0

这将是因为单个电池值不是数组和不具有[UBound函数(https://msdn.microsoft。 com/en-us/library/office/gg278658.aspx)属性。你可以尝试改变他们两个看起来像'对于LBOUND(阵列(arrayv1))到UBound函数(阵列(arrayv1))'但是这可能只是再次转移问题的进一步下跌。考虑识别单个条目并运行单独的过程。 – Jeeped

+0

再次感谢您的信息。我有一个想法绕开这个问题,并使用原code..I会写代码中插入一行先期将有一个组合AA - ZZ和另写代码删除名为AA的标签 - ZZ在的结束宏。这应该工作。我可以编写代码来插入行,但我不知道代码来查找选项卡AA-ZZ并将其删除。对此有什么好运?请注意标签可以是2)AA-ZZ,3)AA-ZZ ...或任何数字)AA-ZZ – Dev