在新工作簿上运行复制的宏时创建的运行时错误

时间:2019-02-08 14:08:17

标签: excel vba runtime-error

我有一个宏,它可以在一个工作簿上很好地工作,但是当我将其复制到新的工作簿中以供使用时,抛出“运行时错误13类型不匹配”。

该宏的功能是读取值列表并创建一个新列表,不包括代码中已指定的字符串。
我要使用的数据集位于B96:B110中,我需要将结果放置在以C96开头的列表中。

到目前为止,我唯一更改过的代码部分是工作表的名称,原始列表的范围引用以及结果需要存放的位置。

Option Explicit

Private Sub compileList()


Dim arr(), i As Long, list As Object
Dim exclusions(), found As Boolean, j As Long

exclusions = Array("examplestring1", "examplestring2", "(examplestring3)", "Example String 4")

With Worksheets("somemacros")

    arr = .Range("B96:B110" & .Cells(.Rows.count, "B").End(xlUp).Row).Value


    Set list = CreateObject("System.Collections.ArrayList")
    For i = LBound(arr, 1) To UBound(arr, 1)
        found = False
        With list
            For j = LBound(exclusions) To UBound(exclusions)
                If InStr(arr(i, 1), exclusions(j)) > 0 Then
                   found = True
                   Exit For
                End If
            Next
            If Not found Then .Add arr(i, 1)
        End With
    Next i

    .Range("C96").Resize(list.count, 1) = Application.WorksheetFunction.Transpose(list.ToArray)

End With

End Sub

在原始工作簿中,代码可以正常工作,但是当我尝试在新工作簿中执行代码时,会出现错误消息,并指向以下代码段:

Application.WorksheetFunction.Transpose(list.ToArray)

之前,我已经将多个宏复制到不同的工作簿中,没有问题,并且据我了解,当数据类型不正确匹配时会出现类型不匹配错误,我完全不知道如何在此处创建不匹配,因此,如果有人可以向新秀解释这个问题的原因,以便将来避免这种情况,将不胜感激。

如果我遗漏了任何重要信息,请随时告诉我。

非常感谢

1 个答案:

答案 0 :(得分:1)

一个问题是以下行:

arr = .Range("B96:B110" & .Cells(.Rows.count, "B").End(xlUp).Row).Value

如果所需范围是B96:B110的硬编码值,则可以使用以下代码:

arr = .Range("B96:B110").Value

如果所需范围应从B96开始并转到包含数据的最后一行,请使用:

arr = .Range("B96:B" & .Cells(.Rows.count, "B").End(xlUp).Row).Value

请注意,更改位于硬编码的字符串中。由于有一个函数可以找到合适的行号,因此无需在文字字符串中包含它。


说明


此部分代码:.Cells(.Rows.count, "B").End(xlUp).Row, 在B列中查找数据的最后一行。如果最后一行是2,则返回2,如果3,则返回3,依此类推。

以这种方式使用该代码时:

arr = .Range("B96:B110" & .Cells(.Rows.count, "B").End(xlUp).Row).Value

它将最后一个行号附加到字符串地址的末尾。例如,如果最后一行数据为2,则范围是从单元格B96到B1102。如果最后一行是97,则查看的最终范围是B96至B11097(11000和97)。假设工作表中包含数据的最后一行至少为几百,那么最终范围将是从B96到至少B110100(超过十一万,超过一百万的十分之一)。

很多单元导致一个非常大的阵列。难怪.Transpose函数出问题了。