Excel VBA指定单元格引用函数

Excel VBA指定单元格引用函数,excel,vba,Excel,Vba,我需要一个函数,可以将单元格引用(通过CTRL+SHIFT+ENTER的数组)分配给工作表。问题是:除非引用的单元格为空,否则它工作得很好,这会给数组的所有单元格部分带来#值错误。这就是我使用的函数 Function GeneratePackingList(PackageTable As Range) Dim bRow As Byte, bCol as Byte Dim asResult() ReDim asResult(1 To 25, 1 To 11) With PackageTable

我需要一个函数,可以将单元格引用(通过CTRL+SHIFT+ENTER的数组)分配给工作表。问题是:除非引用的单元格为空,否则它工作得很好,这会给数组的所有单元格部分带来#值错误。这就是我使用的函数

Function GeneratePackingList(PackageTable As Range)
Dim bRow As Byte, bCol as Byte
Dim asResult()
ReDim asResult(1 To 25, 1 To 11)

With PackageTable
    For bRow = 1 To .Rows.Count
        For bCol = 1 To 11
            Select Case bCol
                'Rearranging the columns order
                Case 1 To 6:    Set asResult(bRow, bCol) = .Cells(bRow, bCol + 1)
                Case 7:         Set asResult(bRow, bCol) = .Cells(bRow, 1)
                Case 8 To 11:   Set asResult(bRow, bCol) = .Cells(bRow, bCol)
            End Select
        Next bCol
    Next bRow
End With
GeneratePackingList = asResult
End Function

因此,基本上,如果PackageTable中的一个单元格为空,则会出现#值错误,所有单元格都将丢失。我是否应该更改变量声明(变量、范围或其他??)是否有其他更有效的方法通过函数分配单元格引用

在您的case子句中使用
Set
会导致
arResult
成为
Range
s的数组。这不是必须的,是你的问题的根源。只需删除
集合
s

            Select Case bCol
                'Rearranging the columns order
                Case 1 To 6:     asResult(bRow, bCol) = .Cells(bRow, bCol + 1)
                Case 7:          asResult(bRow, bCol) = .Cells(bRow, 1)
                Case 8 To 11:    asResult(bRow, bCol) = .Cells(bRow, bCol)
            End Select

如果我没有使用
Set
asResult
是一个变量数组,我不能显示长度大于255的单元格。这给了我一个错误。我需要它是对原始单元格的引用,而不仅仅是通过变量粘贴的值。无论是否使用
,都不能将长度超过255的字符串值返回到数组中。字符串数组似乎可以容纳255个以上的字符