2012-09-28 4 views
0

셀 범위에 값이 있는지 알아보고, 그렇지 않은 경우 함수를 실행하려고합니다.배열에 셀 값을 넣을 때 VBA 런타임 오류가 발생합니다.

  1. 내가 선 titles(i) = cell.Value에 오류 Run-time error 9 - Subscript out of range을 얻고있어 - 내가 그러나이 문제가 엑셀 2007

    을 사용하고 있습니다.

  2. 배열에 값이 있는지 확인하기 위해 If 문에서 사용할 수있는 하나의 라이너를 인식하지 못했습니다.

여기까지 내 코드입니다. 이러한 문제를 해결하는 방법에 대한 조언이나 더 나은 접근법에 대한 조언은 훌륭하게 제시 될 것입니다. 감사.

Sub start() 

    Dim title_range As Range  ' The range that contains the column titles 
    Dim cell As Range    ' The individual cell from the title range 
    Dim titles() As String   ' The column titles 
    Dim i As Integer    ' Dummy for count 

    ' Set the column titles range 
    Set title_range = ActiveWorkbook.Sheets("DJG Marketing - Client List by ").Range("A1:DZ1") 
    i = 0 
    For Each cell In title_range 
     titles(i) = cell.Value 
     i = i + 1 
     ReDim Preserve titles(i) 
    Next 

    If {value 'Matter open month' does not exist in the array `titles`} Then 
     create_month_column 
    End If 

End Sub 

답변

3

이 코드 시도 배열을 초기화하기 전에 값을 할당하려고하기 때문에이 오류가 점점 : VBA에서

i = 0 
ReDim titles(i) 'this is missing ;) 
For Each cell In title_range 
    titles(i) = cell.Value 
    i = i + 1 
    ReDim Preserve titles(i) 
Next 
+0

+1 Yup :) Spot on –

+0

첫 번째 부분이 해결되었습니다. 두 번째 부분에 대한 팁은 전혀 없습니까? –

+0

@DavidGard : http://stackoverflow.com/questions/11109832/how-to-find-if-an-array-contains-a-string –

0

VBA는 배열에서 인덱스 1로 시작하지 않습니까?

그 외에도 항상 LBoundUBound으로 경계를 확인할 수 있습니다.

+1

을 당신이 당신의 배열 범위를 지정하는 것이, 그래서 너하기에 달렸다. 그러나 Siddarth가 지적했듯이 David은 동적 배열을 사용하여 초기화하지 않았으므로 경계가 전혀 없습니다. – Jook

2

당신은

Dim titles() As String 
i = 0 
For Each cell In title_range 
    titles(i) = cell.Value 
    ' 
    ' 
Next 
+0

감사합니다. 내가 이것을해야한다는 것을 알지 못했습니다. –

관련 문제