我正在建立一个宏,以执行以下步骤--------。
当我在自己的电脑上运行它时,它运行得很好,但在我搭档的电脑上,我在底部的ForNext循环的第一行得到一个类型不匹配错误13。
删节后的代码如下(我想我清除了所有不必要的项目)
'''
Dim xWb As Workbook, xWbLoading As Workbook
Dim xWs As Worksheet, xWsLoading As Worksheet, xWsLoading2 As Worksheet
Dim arr1() As Variant, arr2() As Variant, arr3() As Variant
Dim last_row As Long, last_row_loading As Long, j As Long
Set xWbLoading = Workbooks("YTN Loading")
Set xWsLoading = xWbLoading.Sheets("FCL")
Set xWb = Workbooks("Macro Book")
Set xWs = xWb.Sheets("SI Upload")
last_row = xWs.Range("a" & Rows.Count).End(xlUp).Row
last_row_loading = xWsLoading.Range("a" & Rows.Count).End(xlUp).Row
arr1 = xWs.Range("B3:B" & last_row)
arr2 = xWsLoading.Range("D2:Q" & last_row_loading).Value
ReDim arr3(1 To UBound(arr1), 1 To 2)
For i = 1 To last_row-2
**arr3(i, 1) = Application.VLookup(arr1(i, 1), arr2, 14, False)** 'error here
arr3(i, 2) = Application.VLookup(arr1(i, 1), arr2, 8, False)
xWs.Range("C" & i + 2).Value = Left(arr3(i, 1), 7)
xWs.Range("A" & i + 2).Value = xWs.Range("B" & i + 2).Value & " " & arr3(i, 2)
Next i
当我在我的机器上运行这个程序时,它运行得很好。然而,当我把它传递给使用该代码的用户时,它在Array部分失败了。
目前为止的一些故障排除--Arr1是字符串,Arr2包括多种数据类型,Arr3将同时拉回一个日期和一个字符串。
阅读了一些解决方案,似乎这可能是一个问题--Array不能处理多种类型。但我不确定,因为我运行时能够得到正确的信息。
机器信息:两台机器运行的系统语言都是一样的excel 2016(工作机是o365非工作机是普通excel 2016)。
这里有什么解决方法吗,还是说我需要重建vLookup部分?如果有的话--有什么理想的构建方式的建议吗--不知道有没有比工作表函数更好的处理方式。
Arr1是一个数组。而且它是一个变体。arr1 = xWs.Range("B3:B" & last_row)
给它分配一个范围。如果你想把一个范围的值分配给一个变体,你可以使用`。
Dim arr1 As Variant
arr1 = xWs.Range("B3:B" & last_row).Value
但是你的Dim语句使arr1成为一个变体数组。而且你没有指定你要给它赋值。这些错误中的任何一个都足以产生一个类型不匹配的错误。有趣的是,为什么你的计算机能够从这段代码中产生一个你喜欢的结果,又是如何做到的。我猜想这一定是一个版本问题。你的错误是一个相当常见的错误,也许Excel的VBA应用了一些聪明的AI来学习如何正确地猜测你期望它处理的错误类型:-)