2011-11-13 2 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 오류를 얻을 모두가 손실되는 기능입니다. 변수 선언을 변경해야합니까 (variant, range 또는 else?) 함수를 통해 셀 참조를 할당하는 다른보다 효율적인 방법이 있습니까?

답변

2

사례 절에 Set을 사용하면 이 Range s의 배열이됩니다. 이것은 불필요한 것이 아니며 문제를 일으키는 것입니다. 그냥 내가 Set`이,`asResult`가 변형 배열입니다`사용하고 있지 않다 된 IF 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

배열에 255보다 긴 문자열 값을 반환 할 수 없습니다 ('Set '포함 또는 제외). –

+0

문자열 배열은 255 개 이상의 문자를 저장할 수있는 것 같습니다. – AutoClave