Excel 宏只能在某些机器上运行 - 可能是阵列问题?

问题描述 投票:0回答:1

我正在建立一个宏,以执行以下步骤--------。

  1. 读取特定位置的文件夹名称
  2. 使用名称与数据库进行vlookup。
  3. 结合这些细节来重命名并保存到其他地方。

当我在自己的电脑上运行它时,它运行得很好,但在我搭档的电脑上,我在底部的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部分?如果有的话--有什么理想的构建方式的建议吗--不知道有没有比工作表函数更好的处理方式。

excel vba excel-vba
1个回答
0
投票

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来学习如何正确地猜测你期望它处理的错误类型:-)

© www.soinside.com 2019 - 2024. All rights reserved.