【问题标题】:Type mismatch error in MS Excel VBA when array has one element当数组只有一个元素时,MS Excel VBA 中的类型不匹配错误
【发布时间】:2018-05-15 21:47:55
【问题描述】:

首先,请原谅我在技术上不正确的任何术语……

我编写了一个宏,该宏在选定商店的部门之间循环,为每个部门创建一个单独的工作表,然后以 PDF 格式发布,每个部门在其自己的页面上。根据选择的商店,部门的数量可以是 1、11 或 12。我在 Excel 工作簿中使用命名范围 (rngDeptX) 来保存部门名称,然后我用它来填充 VBA 中的数组。对于 11 或 12 个部门的实例,该过程按预期工作,但我收到 1 个部门实例的类型不匹配错误。

相关的代码行应该在下面...

arrSheets 数组在后面使用,并没有导致任何错误。它填充了与数组 d 相同的值,数组 d 是用于循环遍历部门名称的机制。如前所述,如果部门数为 11 或 12,则该过程按预期工作。我单步执行代码,当我在收到类型不匹配错误时将鼠标悬停在其上时,表达式 d = Range("rngDeptX") 返回正确的部门.如果数组只有一项,我必须做些什么不同的事情吗?我已经搜索过,但在类似的问题上都找不到。 感谢您的帮助。

Dim arrSheets() As String, DptCnt As Long   'array of Department names, size of array
'determine required size of arrays, set size of arrays
DptCnt = WorksheetFunction.CountA(Range("rngDeptX"))
ReDim arrSheets(1 To DptCnt)

Dim d() As Variant
d = Range("rngDeptX")  <= this is where the error occurs

【问题讨论】:

    标签: arrays excel vba


    【解决方案1】:

    如果只有一个数组,则强制使用该数组,并且您的 lbound/ubound 应该在进一步的操作中工作。

    Dim d As Variant
    d = Range("rngDeptX").value2
    if not isarray(d) then d = array(d)
    debug.print isarray(d)
    

    【讨论】:

    • 谢谢你,吉普德。它解决了这个特定问题,但越过这一点又暴露了另一个问题:'(我可能只是认输并创建两个宏——一个用于 1 元素实例,另一个用于多元素实例。我可以使用 If 语句选择运行哪一个并且仍然保持对用户透明。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多