For Each 문
For Each문은 콜렉션이나 배열 안에 있는 문자열을 찾거나 문자열 항목을 알아 내고자 할 때 사용합니다.
형식
For Each 구성요소 In 그룹명
[문장]
[Exit For]
[문장]
Next [구성요소]
[그룹명]은 배열이나 컬렉션(Collection)을 설정할 수 있고 [구성요소]에는 그룹명의 내용을 넣을 수 있도록 Variant형식 또는 객체(Object)형식으로 설정을 합니다. For Each 다음에 있는 [구성요소]와 Next 다음에 있는 [구성요소]는 동일해야 합니다. For Each문은 [그룹명]에 들어 있는 문자열만큼 반복을 하면서 [구성요소]에 그 문자열 값을 전달합니다. 그렇기 때문에 그룹명안에 있는 문자열을 찾거나 비교하려면 [구성요소]를 이용합니다.
[실습] 리스트박스에서 이름찾기
이 프로그램은 For Each문을 어떻게 사용하는 지를 알 수 있는 예제입니다.
[폼 작성 화면] |
번호 | 컨트롤 종류 | 컨트롤명 | 속성 | 설정 |
1 | 폼 | Form1 | Caption | "리스트 박스에서 이름 찾기" |
2 | 텍스트 박스 | Text | Caption | "" |
3 | 리스트 박스 | List1 | 변경사항 없음 | |
4 | 라벨 | Label1 | Caption | "" |
5 | 명령 버튼 | Command1 | Caption | "찾기" |
[폼 디자인 구성표]
' 컬렉션 선언
Dim C_Name As New Collection
' 1 폼의 Load이벤트
Private Sub Form_Load()
Dim i As Integer
' 리스트박스에 문자열을 추가
List1.AddItem "신문섭"
List1.AddItem "김정주"
List1.AddItem "송준규"
List1.AddItem "황용문"
List1.AddItem "나성만"
List1.AddItem "이승훈"
' 리스트 박스 안에 있는 문자열을 콜렉션에 넣습니다.
For i = 0 To 5
C_Name.Add List1.List(i)
Next
End Sub
' 2 명령버튼의 Click이벤트
Private Sub Command1_Click()
Dim My_Find
' 텍스트박스에서 입력한 문자열이 컬렉션 안에 포함된 문자열과' 같은 것이 있는지를 찾습니다.
For Each My_Find In C_Name
If My_Find = Text1.Text Then
Label1.Caption = Text1.Text + "을(를) 찾았습니다."
Exit For
Else
Label1.Caption = Text1.Text + "을(를) 못 찾았습니다."
End If
Next
End Sub
프로시저밖에 있는 선언은 'Dim C_Name As New Collection'는 폼에 있는 프로시저에서 사용할 수 있게 하기 위해서입니다. 만약, 다음과 같이 선언한다면 Form_Load()프로시저 안에서만 사용할 수 있습니다.
Private Sub Form_Load()
Dim C_Name As New Collection
.
.
End Sub
New키워드를 이용하여 콜렉션을 참조할 수 있게 해줍니다.
리스트박스(List1) 컨트롤에 항목을 추가하려면, AddItem 메서드를 이용하여 문자열을 추가할 수 있습니다. 추가된 항목의 인덱스(Index)번호는 0부터 시작하여 추가할 때 마다 1씩 증가하여 들어 갑니다.
List속성은 리스트박스 컨트롤에 들어간 항목의 인덱스 번호를 이용하여 문자열을 알아낼 수 있습니다. 예를 들면, 첫 번째에 추가한 '신문섭'은 인덱스 번호가 0번이므로 List(1)하면 알아낼 수 있습니다. 다음과 같이 For문을 사용하여 리스트박스 컨트롤에 들어있는 문자열을 콜렉션에 저장할 수 있습니다.
For i = 0 To 5
C_Name.Add List1.List(i)
Next
텍스트박스(Text1)에서 입력한 문자열과 동일한 문자열을 콜렉션에서 찾고자 한다면, 다음과 같이 For Each문을 사용한 뒤 My_Find 변수와 같은지를 비교하여 알아내면 됩니다.
For Each My_Find In C_Name
If My_Find = Text1.Text Then
Label1.Caption = Text1.Text + "을(를) 찾았습니다."
Exit For
Else
Label1.Caption = Text1.Text + "을(를) 못 찾았습니다."
End If
Next
실행한 후에 '이승훈'을 입력합니다.그런 다음 [찾기]버튼을 누르면 다음과 같이 나타납니다.
리스트에 없는 '이우동'을 입력한 후 [찾기]버튼을 누르면 '못 찾았습니다.' 메시지가 출력됩니다.
On Error 문
Error문은 오류 처리 루틴을 사용 가능하도록 만들고 프로시저에서 루틴의 위치를 지정합니다. 이 문은 오류 처리 루틴을 사용할 수 없도록 하는 데도 사용할 수 있습니다.
종 류 | 설 명 |
On Error Go To 0 | 현재 프로시저의 에러 핸드링을 사용할 수 없도록 합니다. |
On Error Go To 이름 | 에러가 발생하면, 지정된 GoTo [이름]으로 제어 위치를 이동합니다. |
On Error Resume Next | 실행 중에 에러가 발생하면, 수행을 중지하지 않고 발생한 문장의 다음을 수행합니다. |
Private Sub Command1_Click()
Dim i As Integer
On Error GoTo 에러
i = 10 / 0
Label1.Caption = i
End Sub
다음과 같은 에러가 발생합니다.
Private Sub Command1_Click()
Dim i As Integer
On Error GoTo 에러
i = 10 / 0
Label1.Caption = i
Exit Sub
에러:
Label1.Caption = "0으로 나눌 수 없습니다."
End Sub
실행결과 : Label1은 '0으로 나눌 수 없습니다.'가 출력됩니다. 그 이유는 0으로 나눌 없기 때문에 에러가 발생하기 때문입니다.
Private Sub Command1_Click()
Dim i As Integer
On Error Resume Next
i = 10 / 0
Label1.Caption = i
Label1.Caption = "에러가 난 다음 문장입니다."
End Sub
실행결과 : Label1은 '0으로 나눌 수 없습니다.'가 출력됩니다. 그 이유는 0으로 나눌 없기 때문에 에러가 발생하기 때문입니다.
0 댓글