2011-11-13 154 views
0

我需要一個將單元格引用(通過具有CTRL + SHIFT + ENTER的數組)分配給工作表的函數。問題是:它運行良好,除非被引用的單元格爲空,這會給數組的所有單元部分帶來#VALUE ERROR。這是功能,我使用VBA分配單元格引用功能

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這些細胞的一個是空的,我得到的錯誤#VALUE和全部丟失。我應該改變變量聲明(變體,範圍還是其他?)有沒有其他更有效的方式來通過函數分配單元格引用?

回答

2

在您的案例中使用Set子句導致arResult成爲Range的數組。這不是必須的,而且會導致你的問題。只是如果我沒有使用`Set`,`asResult`是一個變量數組刪除Set小號

  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 
+0

,我不能長度> 255的顯示單元它給了我一個錯誤。我需要它是對原始單元格的引用,而不是通過Variant粘貼的值。 – AutoClave

+0

無論是否帶有'Set',您都無法將長度超過255的字符串值返回給數組。 –

+0

字符串數組似乎能夠容納超過255個字符 – AutoClave