[Visual Basic]제어문과 반복문 - 4부






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으로 나눌 없기 때문에 에러가 발생하기 때문입니다.







Reactions

댓글 쓰기

0 댓글