潜水的鱼呀 2024-04-14 16:26 采纳率: 0%
浏览 22

VBA-嵌套数组转二维数组报错类型不匹配,如何解决?

img

img


图一是代码运行至黄色行代码之前,图二是源数据(需求:提取部门)
听的VBA课程代码都一样的课程里可以正常运行,为什么我的会报错呢-黄色行“类型不匹配”?

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-14 16:26
    关注

    引自免费微信小程序:皆我百晓生

    在分析了您提供的信息后,我发现错误可能出现在将一维数组 arr 转换为二维数组 arr1 的过程中。您尝试将每个元素分割成两个子字符串,然后存储在 arr1 中。然而,当您尝试将 arr1 再次转换回二维数组时,出现了“类型不匹配”的错误。这是因为您没有正确地处理数组的维度。

    为了修复这个问题,您可以修改代码如下:

    Option Explicit
    
    Sub p86split()
        Dim arr As Variant
        Dim arr1() As String
        Dim y As Long, i As Long
        
        ' 获取数据区域
        With ThisWorkbook.Worksheets("Sheet1") ' 更改为您的工作表名称
            arr = .Range("A1").CurrentRegion.Value
        End With
        
        ' 计算新的数组尺寸
        ReDim arr1(1 To UBound(arr, 1), 1 To 2)
        
        ' 将数据从一维数组转换到二维数组,并分割每个元素
        For i = LBound(arr, 1) To UBound(arr, 1)
            arr1(i, 1) = Split(arr(i, 1), " - ")[0] ' 提取部门
            arr1(i, 2) = Split(arr(i, 1), " - ")[1] ' 提取工号
        Next i
        
        ' 将二维数组赋值给范围并删除重复项
        With ThisWorkbook.Worksheets("Sheet1") ' 更改为您的工作表名称
            .Range("B1").Resize(UBound(arr1, 1), UBound(arr1, 2)).Value = arr1
            .Columns("B:B").RemoveDuplicates 1, xlNo
        End With
    End Sub
    

    在这段代码中,我做了以下几个改动:

    1. 添加了 Option Explicit 来强制变量声明。
    2. 使用 .Value 属性获取当前区域的数据,以便可以处理数字和文本。
    3. 修改了 ReDim arr1() 语句,指定了二维数组的大小。
    4. 在循环内,我使用 Split(arr(i, 1), " - ")[0]Split(arr(i, 1), " - ")[1] 分别提取部门和工号。
    5. 最后,我将二维数组 arr1 直接赋值给了一个范围,而不是通过 Application.Transpose 函数,这样就不需要再次进行转置操作。

    确保在运行这段代码之前,已将工作表名称替换为实际的工作表名称。此外,这个例子假设数据在第一列中且格式是"部门 - 工号"。如果实际情况不同,请相应调整代码中的分隔符。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月14日