2014-07-17 7 views
0

열 A, B & C 테이블이 있고 열 이름을 찾기 위해 다음 코드를 가지고 있고 이러한 이름을 "ABC" . 그러나 범위 밖의 런타임 오류 9 아래 첨자로 반환합니다. 이 오류를 제거하려면 어떻게해야합니까? 미리 감사드립니다!액세스 vba 배열 - 범위 밖의 오류 # 9

Option Compare Database 

Private Sub check_tbl2_Click() 
Dim ind() As String 
Dim joinInd As String 
Dim l As Integer 
For l = 0 To CurrentDb.TableDefs("tbl2").Fields.Count - 1 
    MsgBox (CurrentDb.TableDefs("tbl2").Fields(l).Name) 
    ind(l) = CurrentDb.TableDefs("tbl2").Fields(l).Name 
Next l 
joinInd = Join(ind) 
MsgBox (joinInd) 
End Sub 

답변

0

ind()의 크기는 절대로 설정하지 마십시오. 여기에 한 가지 방법이 있습니다. redim 문을보십시오.

Sub check_tbl2_Click() 
    Dim ind() As String 
    Dim joinInd As String 
    Dim l As Integer 
    ReDim ind(CurrentDb.TableDefs("tbl2").Fields.Count - 1) 
    For l = 0 To CurrentDb.TableDefs("tbl2").Fields.Count - 1 
     MsgBox (CurrentDb.TableDefs("tbl2").Fields(l).Name) 
     ind(l) = CurrentDb.TableDefs("tbl2").Fields(l).Name 
    Next l 
    joinInd = Join(ind) 
    MsgBox (joinInd) 
End Sub 
0

이 당신을 위해 작동합니다 :

편집 :는 사실, 톰 콜린스의 대답은 당신이 배열 방법으로 유지하기로 결정한 경우 훨씬 더, 그래서 이것을 사용하지 마십시오. 나는 가장 효율적으로 생각하고 있지 않았습니다.

Private Sub check_tbl2_Click() 
    Dim ind() As String 
    Dim joinInd As String 
    Dim l As Integer 

    ReDim ind(1) 

    For l = 0 To CurrentDb.TableDefs("tbl2").Fields.Count - 1 
     'MsgBox (CurrentDb.TableDefs("tbl2").Fields(l).Name) 
     ReDim Preserve ind(UBound(ind) + 1) 
     ind(l) = CurrentDb.TableDefs("tbl2").Fields(l).Name 
    Next l 

    joinInd = Join(ind) 
    MsgBox (joinInd) 
End Sub 

하지만 왜 그냥 :

Private Sub check_tbl2_Click() 
    Dim joinInd As String 
    Dim db As DAO.Database 
    Dim fld As DAO.Field 

    Set db = CurrentDb() 

    For Each fld In db.TableDefs("tbl2").Fields 
     joinInd = joinInd & fld.Name 
    Next 

    MsgBox (joinInd) 

    Set db = Nothing 
End Sub