수안보중학교 로고이미지

RSS 페이스북 공유하기 트위터 공유하기 카카오톡 공유하기 카카오스토리 공유하기 네이버밴드 공유하기 프린트하기
1. Visual BASIC 기본 문법
작성자 컴샘 등록일 19.09.06 조회수 92
첨부파일

1. Visual BASIC 기본 문법
 
1. 변수
   변수란 프로그램이 실행되고 있는 동안 갱신될 수 있는 자료를 저장하는 장소에 이름을 붙인 것이다.
   비주얼 베이직에서는 변수의 선언을 Dim이라는 명령을 사용하여 처리한다. 변수 선언의 방법을 설명하기 이전에 먼저 알아두어야 할 점이 있다. 비주얼 베이직에서는 변수를 선언하지 않고도 변수를 사용할 수 있다는 점이다. 만약 비주얼베이직에서 변수를 선언하지 않고 사용한다면 그 변수의 데이터형은 Variant가 된다.
   그러나 변수를 선언하지 않고 사용하는 것은 프로그램의 논리적 버그를 초래한다. 그러므로 프로그램의 선두 부분에 다음과 같은 지시자를 사용하여 선언되지 않은 변수는 사용하지 못하게 하는 것이 바람직하다.
 

Option Explicit


 
   변수를 선언하는 방법은 다음과 같다.
 

Dim 변수명 as 데이터형


 
    비주얼 베이직 5.0 이후부터는 변수, 함수, 컨트롤 이름, 그리고 컨트롤 제작 시 이벤트까지 한글로 가능하다. 다음은 한글 변수로 선언된 예이다.
 

Option Explicit
Dim 주소 as String
Dim 번호 as integer
·
·


 
    변수란 프로그램 실행 중 수정될 수 있는 데이터를 포함할 수 있는 명명된 저장 위치를 의미한다. 각 변수는 그것의 범위 안에서 유일하게 식별하는 이름을 가진다. 데이터 형식은 지정될 수도 있고 안될 수 있다. 변수 이름은 문자로 시작해야 하고, 같은 범위 안에서 유일해야 하며, 255문자보다 적어야 되며, 포함 구간이나 형식 선언 문자를 포함할 수 없다. 아래는 변수의 선언과 구현의 예를 보여준다.
 

Dim Space As Integer
Space = 10


    Space는 변수명이고 Integer는 데이터 형식이다. 비주얼 베이직에서는 "="을 대입 연산자의 의미와 등위 연산자(동등 비교)의 의미를 동일하게 가지고 있다. 즉, 변수에 값을 대입할 때에는 대입 연산자의 의미로, 조건절에 쓰일 때는 같다는 등위 연산자로 사용된다. 위에서는 Space라는 변수에 10을 대입하라는 의미이다.    대입 연산자를 중심으로 좌에 오는 값을 lvalue, 우에 오는 값을 rvalue라고 하는데 lvalue는 저장 공간을 가지는 변수이고 rvalue는 상수 또는 계산 후 값이 되는 것을 사용할 수 있다.
    여기서 데이터형을 사용하는 대신 데이터형을 나타내는 하나의 문자, 즉 형식선언 문자를 사용할 수도 있다. 변수를 선언하는 두 가지 예는 다음과 같다.
 

Dim A as Integer(Dim A%)
Dim B as String(Dim B$)


    변수 선언은 다음 규칙을 따라야한다.
 
   ·변수 이름은 255자 이상 사용할 수 없다.
   ·변수 이름을 사용할 수 있는 문자는 한글, 영문자, 숫자, 밑줄(_)이다.
   ·특수 기호는 사용할 수 없다.
   ·변수 이름의 첫 번째 문자는 반드시 영문자나 한글만 사용해야 한다.
   ·변수 이름은 비주얼 베이직에서 사용하는 예약어를 사용할 수 없다.
   ·메소드, 함수, 속성과 동일한 변수명을 사용하지 않는 것이 좋다.
   다음은 올바른 변수 선언과 올바르지 않은 변수 선언에 대한 예이다.
  

Dim 국어 As Integer
Dim My_Str As String
Dim a88 As Long
Dim Eng As Single
(옳은 예)
 

Dim a* As Integer
Dim 2abc As String
Dim Integer As Long
Dim Park DH As Currency
(옳지 않은 예
 


 
  가. 기본적인 데이터 형
     비주얼 베이직에서는 다양한 형태의 데이터형을 제공한다. 그러나 모든 데이터형을 알 필요는 없다. 그러나 기본적으로 반드시 알아야 하는 데이터형인 1 바이트의 메모리를 할당하는 Byte와 진리값을 저장하는 Boolean, 그리고 정수값을 저장하는 Integer와 문자열을 저장하는 String 값 정도는 알아야 한다
 
    다음은 기본적인 데이터형에 대해서 요약해 놓은 것이다.
 

데이터
형  식
저장 용량
형식
선언
문자
범         위
Byte
1바이트
없음
0 ∼ 255까지
Boolean
2바이트
없음
True 또는 False
Integer
2바이트
%
-32,768 ∼ 32,767까지
Long
4바이트
&
-2,147,483,648 ∼ 2,147,483,647까지
Single
4바이트
!
(음수값) : -3.402823E38 ∼ -1.401298E-45
(양수값) : 1.401298E-45 ∼ 3.402823E38
Double
8바이트
#
(음수값) : -1.79769313486232E308 ∼
                 -4.94065645841247E-324
(양수값) : 4.94065645841247E-324 ∼
                   1.79769313486232E308
Currency
8바이트
없음
-922,337,203,685,477.5808 ∼
                 922,337,203,685,477.5807
Date
8바이트
없음
100년 1월 1일 ∼ 9999년 10월 31일
Object
4바이트
없음
모든 개체 참조
String
10바이트+
문자열 길이
$
0 ∼ 약 2조
Variant
(숫자)
16바이트
없음
Double형 범위 내의 모든 숫자
Variant
(문자)
22바이트+
문자열 길이
없음
변수-길이 String과 같은 범위


 
  나. 사용자 정의형 (Type 형)
     어떠한 언어에서나 기본적인 데이터형만으로 프로그램을 하는 경우는 드물다(정확히 말해서 거의 불가능하다). C/C++에서 Struct 지시자를 사용하는 것과 마찬가지로 베이직과 파스칼에서는 Type 지시자를 사용하여 사용자 정의 데이터형을 선언할 수 있다.
    사용자 정의 데이터형은 간단히 말해서 사용자가 필요한 크기의 데이터 형태를 정의하는 것을 말한다. Type 지시자의 사용법은 다음과 같다.
 

 [Private | Public] Type 사용자 정의형 이름
     ..
     구성 요소 as 데이터형
     ..
 End Type


 
    사용자 정의형 데이터를 모듈에서 선언했다면 비주얼 베이직의 어디에서나 변수를 사용하는 방법과 마찬가지로 사용할 수 있다. 그러면 한 가지 예로 회원 관리를 위해 다음과 같은 사용자 정의형 변수를 선언했다고 가정하자.
 

 Type 소프트동호회원
     ID As String * 8
     이름 As String * 20
     주소 As String * 30
     나이 As Integer
     가입날짜 As Date
 End Type


    한 가지 참고해야 할 것은 Type 지시자는 모듈에서 선언해야 한다는 것이다.  다른 곳에서 선언하면 제대로 사용할 수 없다. 소프트동호회원형 변수의 각 구성 요소를 제어하고자 한다면 비주얼 베이직에서 친숙하게 만날 수 있는 도트 연산자를 사용하면 된다.
 

Sub CreateRecord()
     Dim 기존회원 As 소프트동호회원
     기존회원.ID = "crack90"
     기존회원.이름 = "박성완"
     기존회원.나이 = 28
 End Sub


 
 
2. 상수
 
   비주얼 베이직에서 상수를 선언할 경우에는 Const 지시자를 사용한다. 먼저 Const 지시자를 사용하는 방법을 알아보기 전에 상수에 대한 정의를 살펴보기로 하자. 상수는 값에 대한 매크로라고 할 수 있다. 즉, 특정값(수, 문자, 문자열)을 다른 이름으로 치환하여 사용하는 것을 말한다.
 
   비주얼 베이직에서 상수를 정의하는 방법은 다음과 같다.
        

[public|private] Const 상수명 [As 데이터형] = 값


   [public|private]은 제한자로써 선택적인 사항으로써 써도 좋고 안써도 좋다. 다만 쓰지 않을 경우에는 디폴트로 private이 된다. 그리고 상수는 [As 데이터형]을 사용하여 데이터형을 가질 수 있다. 이것 역시 선택 사항이다. 여기서 상수명 작성 규칙은 변수명 작성 규칙과 동일하다.
 
   상수를 정의한 예는 다음과 같다.
 

Const Max = 300
Public Const Size As Integer = 100
Public Const Address = "Seoul"


 
 
3. 주요 내장 함수
 가. 형 변환 함수
 

함 수
설          명
CByte
Byte 형으로 변환한다.
CInt
Integer 형으로 변환한다.
CLng
Long 형으로 변환한다.
CSng
Single 형으로 변환한다.
CDbl
Double 형으로 변환한다.
CCur
통화를 나타낼 때 사용하는 Currency 형으로 변환한다.
CDate
Date 형으로 변환한다.
CDec
Decimal 형으로 변환한다.
CVar
Variants 형으로 변환한다.
CStr
String 형으로 변환한다.
CBool
Boolean 형으로 변환한다.


 
 나. 수학 함수
 

함 수
함   수   값
예  /  비고
Int(x)
Fix(x)
Abs(X)
x를 넘지 않는 최대 정수
x의 정수 부분
x의 절대값
Int(3.14) => 3
Fix(-3.14) => -3
Sqr(x)
Hex(x)
Sgn(X)
Rnd
x의 제곱근
x의 16진수 값(문자열)
x가 양수이면 1,
음수이면 -1, 0 이면 0
0~0.9999...사이의 난수
Sqr(2) => 1.414
Hex(254) => FE
Sgn(-10) => -1
Sin(x)
Cos(x)
Tan(X)
x의 사인값
x의 코사인값
x의 탄젠트값
x는 각도가 아닌 라디안
단위
라디안 = (각도/180) * π
Exp(x)
Log(x)
e의 x승값
log x값
Exp(1) => 2.718
Log(2.718) => 0.999


 
 다. 문자열 처리 함수
 

함    수
함    수    값
LCase(문자열)
UCase(문자열)
문자열의 영어 대문자를 모두 소문자로 바꾼 값
문자열의 영어 소문자를 모두 대문자로 바꾼 값
Left(문자열, n)
Right(문자열, n)
Mid(문자열, m, n)
 
문자열의 왼쪽 n문자(바이트)
문자열의 오른쪽 n문자
문자열의 m번째 이후 n문자. n을 생략하면 m번째이후 모든 문자
LTrim(문자열)
RTrim(문자열)
Trim(문자열)
문자열의 왼쪽의 공란을 잘라 없앤 값
문자열의 오른쪽의 공란을 잘라 없앤 값
문자열의 왼쪽과 오른쪽의 공란을 잘라 없앤 값
Len(문자열)
InStr
([n,] 문자열1, 문자열2)
문자열의 길이(바이트수)
문자열의 n번째 문자 이후에 [문자열2]가 포함되어 있는 위치, 포함되어 있지 않으면 0


 
   1) Mid( )
      Mid(str1, n [,l]) = str2
      기능 : str1의 n번째 이후 l문자를 str2(의 처음 n문자)로 바꾼다. l을 생략하면 n번째 이후의 [str2의 길이] 만큼의 문자열이 str2로 바뀐다.
 
   2) InStr( )  
      함수 InStr([n,] 문자열1, 문자열2)는 [문자열1] 중에 [문자열2]가 포함되어 있는 위치를 구한다. 포함되어 있지 않으면 0을 구하며, n을 지정하면 n번째 문자(바이트)부터 조사를 시작한다. 한글/한자는 1자가 2바이트이다.
 
 라. 대화 상자
   1) MsgBox 함수
      MsgBox는 윈도우의 메시지 다이얼로그를 표시하는 함수이다. 함수를 호출하면 대화 상자 안에 메시지를 보여주며, 사용자가 단추를 누를 때까지 기다리다가 사용자가 누른 단추에 해당하는 값을 리턴한다.
  

MsgBox( 문자열[, 버튼 상수] [, 타이틀 문자열] [, 헬프 파일, context])


      다른 것들은 생략이 가능하지만 표시하고자 하는 문자열은 반드시 적어 주어야 한다. 만약 이 문자열이 2줄 이상이라면, CR(Carriage Return) 문자인 Chr(13)과 LF(Line Feed) 문자인 Chr(10)를 이용해 구분해야 한다. 문자열을 합치는 연산자가 '&'이기 때문에 'Chr(13) & Chr(10)'가 두 문자열 사이에 더해져야 한다. Chr() 함수는 인자로 준 아스키 코드에 대한 아스키 문자를 리턴해 주는 함수이다.
 

 
 
 
 
 
 
 
 
 

종류
상       수

설         명
버튼
모양
vbOKOnly
0
[확인] 버튼
vbOKCancel
1
[확인], [취소] 버튼
vbAbortRetryIgnore
2
[중단], [재시도], [무시] 버튼
vbYesNoCance
3
[예], [아니오], [취소] 버튼
vbYesNo
4
[예], [아니오] 버튼
vbRetryCancel
5
[재시도], [취소] 버튼
아이콘
모양
vbCritical
16
[중대 메시지] 아이콘
vbQuestion
32
[질의 경고] 아이콘
vbExclamation
48
[메시지 경고] 아이콘
vbInformation
64
[메시지 정보] 아이콘
기본
버튼
vbDefaultButton1
0
첫째 버튼을 기본값으로
vbDefaultButton2
256
둘째 버튼을 기본값으로
vbDefaultButton3
512
셋째 버튼을 기본값으로
vbDefaultButton4
768
넷째 버튼을 기본값으로
모달
속성
vbApplicationModal
0
응용 프로그램에 대한 모달 속성 적용
vbSystemModal
4096
시스템에 대한 모달 속성 적용
기타
vbMsgBoxHelpButton
16384
메시지 박스에 [도움말] 버튼 추가
vbMsgBoxSetForeground
65536
메시지 박스 창을 전경 창으로 지정
vbMsgBoxRight
524288
문자열을 오른쪽으로 정렬
vbMsgBoxRtlReading
1048576
문자열을 위에서 아래로, 오른쪽에서 왼쪽으로 읽을 수 있도록 지정


   
 
    타이틀은 다이얼로그 박스의 캡션 바에 나타나는 문자열이다. 만약 타이틀을 생략하면 응용 프로그램의 이름이 대신 나타난다.
    만약 다이얼로그 박스에서의 선택이 중대한 의미를 가지며, 또한 그에 대한 부가적인 설명이 필요하다고 생각되면 다이얼로그 박스 상에서 관련 도움말을 볼 수도 있다. 헬프 파일을 지정하면 바로 이것이 가능해진다. 만약 헬프 파일명이 지정되면 context도 반드시 부여되어야 한다. context는 헬프 파일의 각 항목에 부여된 도움말 문 번호를 말한다.
    MsgBox 함수의 리턴값은 어떤 버튼을 눌렀느냐에 따라 결정된다. 아래 리턴값들이 설명되어 있다.
 

상  수

설  명
vbOK
1
[확인] 버튼
vbCancel
2
[취소] 버튼
vbAbort
3
[중단] 버튼
vbRetry
4
[재시도] 버튼
vbIgnore
5
[무시] 버튼
vbYes
6
[예] 버튼
vbNo
7
[아니오] 버튼


 
2) InputBox
 
         


   InputBox는 MsgBox와 더불어 사용자와 상호 작용하는 가장 기본적인 함수이다.
   InputBox는 MsgBox처럼 예, 아니오 등으로 나타낼 수 있는 간단한 정보가 아닌, 좀 더 구체적인 정보를 사용자로부터 얻어낼 때 사용된다. InputBox를 사용하게 되면 화면에 InputBox 폼이 뜨게 되며, 사용자가 입력한 값은 String으로 처리된다.
 
  문법
    svarname=InputBox(Prompt [,title][,default][,xpos][,ypos][,helpfile,context]
 
  예제
  Dim RetName As String
  RetName = InputBox("원하는 값을 입력하시오", "이름 입력", 1000, 1000)
   Prompt는 역시 사용자에게 보여지는 문장이며, title은 폼의 캡션, 그리고 default는 입력받을 초기 값이다.
  Xpos와 Ypos는 폼의 왼쪽 상단 위치를 지정하는 것이고, 생략하면 화면의 한가운데 나타나게 된다.
  위의 예제는 앞쪽의 그림으로 나타나 있다.
 
 
4. 배열
 
   비주얼 베이직에서는 크게 동적 배열과 정적 배열로 배열을 선언할 수 있다.   먼저 배열에 대한 정의를 내리면 일정 데이터형을 저장할 수 있는 변수 모임의 주소라고 할 수 있다. 즉 byte형의 변수를 10개 이상 저장할 필요가 있다면 byte 형 변수를 10개의 인덱스를 주고 선언하면 된다.
   배열을 선언하는 방법은 변수를 선언하는 방법과 동일하다. 다만 배열명에는 ()와 같은 괄호가 덧붙여져 있다는 것만이 다르다.
              

 Dim 배열명(첨자) As 데이터형


   여기서 첨자가 하나만 있는 것을 1차원 배열이라 하고 첨자가 여러 개 있는 것을 다차원 배열이라 한다. 대표적인 다차원 배열에는 첨자가 2개 있는 2차원 배열이 있다.
   정적 배열은 말이 의미하는 것처럼 배열이 정적인 것을 말한다. 즉 배열의 크기가 고정되어 있는 경우를 말한다. 일반적으로 배열을 선언할 경우 ()안에 배열의 범위나 크기를 설정하는 경우가 있다. 이럴 경우 메모리에는 ()안의 범위나 크기만큼 배열이 차지하게 된다.
   다음은 여러 가지 배열을 선언한 예이다.
 

 Dim DayArray(50)                                  '배열 크기
 Dim Matrix(3, 4) As Integer                        '2차원 배열
 Dim MyMatrix(1 To 5, 4 To 9, 3 To 5) As Double '3차원 배열
 Dim BirthDay(1 To 10) As Date                    '배열 범위


   일반적으로 배열의 범위를 지정하지 않고 크기만을 지정한 경우는 인덱스가 0으로 설정되어 있다. 그러나 Option Base 명령을 사용하여 인덱스를 수정할 수 있다.
    Option Base 명령은 소스 내에서 배열을 선언할 경우 배열의 인덱스를 강제적으로 지정해줄 수 있는 명령이다. 그러므로 소스의 선두 부분에 선언해주어야 한다.
   

 Option base 1                                ' 기본 배열 첨자를 1로 설정
 Dim Lower
 Dim MyArray(20), TwoDArray(3, 4)           ' 배열 변수를 선언
 Dim ZeroArray(0 To 5)                       ' 기본 첨자를 변경
                            ' LBound 함수로 배열의 하위 제한 범위를 검사
 Lower = LBound(MyArray)                   ' 1을 반환
 Lower = LBound(TwoDArray, 2)              ' 1을 반환
 Lower = LBound(ZeroArray)                  ' 0을 반환


   동적 배열은 배열의 크기가 유동적인 배열을 의미한다. 즉 배열 선언 시 크기를 설정하지 않은 배열을 동적 배열이라고 한다. 배열을 동적으로 선언해 주는 것이 메모리를 효율적으로 사용하는 것이다.
 

 Dim Alien() As Integer


   동적 배열을 사용할 경우(정적 배열도 마찬가지) 배열의 크기를 수정할 경우가 생긴다. 이 때에는 Redim 함수를 사용하여 배열의 크기를 재정의 해줄 수 있다.
 

 Redim 배열명(범위|크기)


 
 
5. 연산자
 
  연산자는 선언한 변수를 값을 넣어 계산하거나 비교하여 값을 처리할 수 있게 해준다. 논리 연산자는 논리 연산을 수행하는 데 사용하는 연산자이다. 지정 연산자는 속성이나 변수에 값을 지정한다. 비교 연산자는 비교하는 데 사용하는 연산자이다. 산술 연산자는 수학적인 계산을 수행하는 데 사용하는 연산자이다. 연결 연산자는 문자열을 연결하는 데 사용하는 연산자이다.  
 
 가. 산술 연산자
   1) 곱셈, 나눗셈, 덧셈, 뺄셈 연산자
      설명 : 두 숫자를 사칙 연산하는 데 사용한다.
      구문 :
            

결과 = 수식1 * 수식2  
결과 = 수식1 / 수식2
결과 = 수식1 + 수식2
결과 = 수식1 - 수식2


             

구성 요소
       설     명
결과
임의의 특정 숫자 변수
수식 1
임의의 특정 수식
수식 2
임의의 특정 수식


 
   2) 정수 나눗셈(\) 연산자 & 나머지(Mod) 연산자
      정수 나눗셈 연산자와 나머지 연산자를 이용하면 몫(\: 역슬래시)과 나머지(Mod)를 구할 수 있다. 즉, 9를 2로 나눈 몫과 나머지를 구하려면 아래와 같이하면 된다.
            

 Private Sub Command1_Click()  
     Label1.Caption = 9 Mod 2          '1을 반환
     Label2.Caption = 9 \ 2            '4를 반환  
 End Sub


 
 나. 지수 연산자 (^)
    설명 : 숫자를 지수로 거듭 제곱하는 데 사용한다.
    구문 :

result = number^exponent


 
    ^ 연산자 구문은 아래와 같이 구성된다.
            

구성 요소
설      명
result
임의의 특정 숫자 변수
number
임의의 특정 수식
exponent
임의의 특정 수식


 
 다. 연결 연산자 (&, +)
   1) 문자열 연결(&) 연산자
     설명 : 두 식의 문자열을 연결하는 데 사용한다.
     구문 :  

결과= expression 1 & expression 2  


 
    
 & 연산자 구문은 아래와 같이 구성된다.
                  

구성 요소
설     명
결과
임의의 특정 변수
expression 1
임의의 특정 식
expression 2
임의의 특정 식


 
   2) 덧셈 연산자 (문자열과 문자열)
      덧셈 연산자의 경우 문자열 연결 연산자와 같이 문자열과 문자열을 연결해 준다.
 
 라. 논리 연산자
    산술 논리 연산자는 True, False로 나타낸다. 좌변과 우변에 따라 And, Or, Xor, Imp, Eqv의 논리값이 다르게 나타난다.
    And는 논리곱, Or는 논리합, Xor는 배타적 논리합, Eqv는 배타적 논리곱, Imp는 필요 충분 조건을 검사하는 논리 연산자이다.
 
 마. 비교 연산자
 

연산자
설명
결과가
True인 조건문
결과가
False인 조건문
결과가
Null인 조건문
<
보다 작다
expression 1 <
expression 2
expression 1 >=
expression 2
expression 1 또는
expression 2 = Null
<=
작거나 같다
expression 1 <=
expression 2
expression 1 >
expression 2
expression 1 또는
expression 2 = Null
>
보다 크다
expression 1 >
expression 2
expression 1 <=
expression 2
expression 1 또는
expression 2 = Null
>=
크거나 같다
expression 1 >=
expression 2
expression 1 <
expression 2
expression 1 또는
expression 2 = Null
=
같다
expression 1 =
expression 2
expression 1 <>
expression 2
expression 1 또는
expression 2 = Null
<>
같지 않다
expression 1 <>
expression 2
expression 1 =
expression 2
expression 1 또는
expression 2 = Null


 
 
 
6. 제어문
 
   비주얼베이직의 제어문에는 조건문(If, Select Case), 반복문(While, Do Loop )이 있고 그 외에 Exit이 있다.
 
 

 분 류
제어문
설           명
조건문
If
조건에 따라 분기를 한다.
Select Case
지정한 변수에 따라 분기한다.
반복문
For
초기값, 증가값, 최종값을 지정하여 반복한다.
While
조건을 만족하는 동안만 문장을 반복한다.
Do...Loop
조건을 만족하는 동안만 문장을 반복하거나
조건을 만족할 때까지 문장을 반복한다.
Exit Do문을 사용하여 반복하는 중간에 중지할 수 있다.
기타
Exit
수행 중에 강제적으로 종료를 할 때 사용한다.


 
 가. If .. Then .. Else
     If .. Then ..Else 문은 가장 기본적인 비교문 중에 하나이다. If .. Then .. Else 문은 다음과 같은 구문을 사용한다.
           

      If .. Then .. Else 문은 크게 2가지 형태로 사용된다.
     ① If 조건식 Then [실행코드] [Else] [실행코드]
 
     ② If 조건식 Then
               [실행코드]
         [ElseIf 조건식 Then]
               [실행코드]
         [Else]
               [실행코드]
         End If


     If문에서는 조건식이 참일 경우, Then 이하의 코드를 수행하게된다. 그리고 조건식이 거짓일 경우는 Else나 End If로 수행이 넘어가게 되는 것이다. If문을 ①과 같이 사용할 경우 End If를 생략할 수 있다. 그러나 프로그래밍 습관상 되도록 End If를 사용해주는 것이 좋다.
 
 
 
다음은 If ∼ Then 문을 간단하게 사용한 예제이다.
    

      Private Sub cmdIf_Click()  
               Dim 선택 As VbMsgBoxResult
               선택 = MsgBox("종료하시겠습니까?", vbYesNo, "If 예제")  
               If 선택 = vbYes Then  
                    End  
               Else  
                     Beep  
               End If  
      End Sub


     위의 예제는 버튼을 클릭했을 경우, 종료 메시지 상자가 나타난다. 그리고 종료 메시지 상자에서 '예' 버튼을 클릭했는가 아니면 '아니오' 버튼을 클릭했는가의 결과값을 "선택" 변수에 저장한다. 그리고 간단한 If .. Then .. End if 문으로 비교를 한다.
  
 나. Select .. Case
     Select .. Case 문은 여러 가지 조건을 비교할 경우에 사용되는 비교문이다. 간단히 말해서 식의 값에 따라 몇 개 그룹의 문중의 하나를 실행한다. 즉 입력값(비교 대상)은 하나이고 비교해야 할 경우가 여러 가지일 경우에 사용한다. Select .. Case 비교문의 구문은 다음과 같다.
                 

      Select Case 비교대상  
          [Case] 비교문(값)  
               실행코드
          [Case] 비교문(값)
               실행코드
          [Case Else] 비교문(값)
               실행코드
      End Select


     각 Case 절 안에서는 값뿐만이 아니라 식이나 범위를 사용할 수 있다. 예를 들면 다음과 같은 표현도 가능하다.
              

 Case 1 To 4, 7 To 9, 11, 13, Is > 최대값


     Case 문에서 주의해야 할 점은 Case 문 다음에 실행될 코드는 반드시 Enter키 이후에 기재해주어야 한다는 점이다.
 
     그러면 Case문을 이용한 간단한 예제를 보도록 하자. 다음 소스는 커맨드 버튼 컨트롤 한 개와 레이블 컨트롤만이 있는 폼에서 작성한 코드이다.
 

      Const 정답번호 As Integer = 70
 
      Private Sub cmdCase_Click()  
            Dim 추측번호 As Double  
            Dim 입력문자 As String  
            입력문자 = InputBox("1부터 100 사이 숫자", "1에서 100사이")  
            추측번호 = Val(입력문자)
             Select Case 추측번호  
                  Case 1 To 69  
                        lblResult.Caption = "조금 올려보세요 " + 입력문자  
                  Case 71 To 100  
                        lblResult.Caption = "조금 낮추어보세요? " + 입력문자  
                  Case 70  
                        Beep  
                        lblResult.Caption = "정답이네요 " + 입력문자  
                  Case Else  
                        lblResult.Caption = "바보아냐? " + 입력문자  
            End Select  
      End Sub


 
 다. For 문  
     For 문은 전형적인 반복문으로 자주 사용되는 편이다. 변수의 초기값에서 증가값만큼 증가를 해서 최종값까지 반복을 한다. Step과 증가값을 생략하면 자동으로 1씩 증가한다. For 다음의 변수와 Next 다음의 변수는 동일해야 한다. 같지 않으면 에러가 발생한다. For 문이 하나인 경우에는 Next 다음의 변수를 생략하여 For 문을 사용해도 된다.  
 
     For 문의 사용 형식은 다음과 같다.
                

For counter = start To end [Step step]
      [statements]
      [Exit For]
      [statements]
Next [counter]


 
 
     For...Next 문은 아래 요소로 구성된다.
 

구성 요소
설                  명
counter
루프 카운터로 사용되는 숫자 변수
이 변수는 배열 요소 또는 사용자 정의 형식의 요소가 될 수 없다.
start
counter의 초기값
end
counter의 최종값.
step
루프를 반복할 때마다 매번 바뀌는 counter의 합계이다.
지정하지 않으면 step의 기본값은 1이 된다.
statements
지정한 횟수만큼 반복해서 실행되는 For와 Next 사이에 있는 하나 이상의 문이다.


     step 요소는 양수 또는 음수가 될 수 있다.
     일단 루프를 시작하고 해당 루프의 모든 문을 실행하였으면 counter에 step를 더한다. 이 때 처음 루프를 실행시킨 것과 동일한 검사를 수행하여 루프의 문을 다시 실행하거나 루프를 빠져 나와 Next 문 바로 뒤에 있는 문으로 계속 실행된다.
     Exit For 문은 루프를 빠져나가는 방법을 제공하기 위해 For...Next 제어 구조 안에서만 사용할 수 있다. 여러 개의 Exit For 문을 루프 안의 아무 곳에 둘 수 있다.
     Exit For 문은 If...Then 문과 같은 조건문을 계산할 때 자주 사용되며 Next문 바로 뒤에 오는 문으로 제어를 전송한다.
     For...Next 루프는 다른 For...Next 루프 안에 중첩시킬 수 있다. 각 루프에 유일한 변수 이름을 counter 변수로 제공해야 한다.
 
   올바른 For...Next 중첩문의 예는 아래와 같다.
                 

For I = 1 To 10
      For J = 1 To 10
            For K = 1 To 10
            . . .
            Next K
      Next J
Next I


 
 
 
     For 문의 예는 아래와 같다.
    

      Private Sub Command1_Click()
            Dim Total As Integer
            Total = 0
            For i = 1 To 100
                  Total = Total + i      ' 1에서 100까지 합을 구한다.
            Next
             Label1.Caption = Total
      End Sub


 
 라. While 문
    주어진 조건이 True인 동안은 일련의 문을 계속 실행한다.
                           

While condition
[statements]
Wend


 
     While...Wend 문은 다음과 같은 구성 요소로 되어있다.
 

구성 요소
설             명
condition
필수. 수식 또는 True나 False로 평가되는 문자식 condition이
Null인 경우 condition은 False로 처리된다.
statements
선택. 주어진 조건이 True인 동안 하나 이상의 문을 실행한다.


     condition이 True이면 Wend 문을 만날 때까지 모든 statement를 계속 실행한다. 그런 다음 프로그램의 제어가 While 문으로 반환되고, condition은 다시 평가된다. condition이 여전히 True인 경우 프로그램은 반복하여 처리된다. True가 아닌 경우 프로그램은 Wend문 다음 문을 실행한다.
 
     While...Wend 루프는 어느 수준에서든 중첩하여 사용할 수 있다. 각 Wend 문은 가장 최근의 While 문에 대응한다.
  
 
     다음은 While...Wend 루프의 예제이다.
   

      Private Sub Command1_Click()
            Dim i As Integer
            Dim Total As Integer
            '초기값 0을 넣어준다.
            i = 0
            While i < 100
                  i = i + 1
                  Total = Total + 1      ' 1에서 100까지 합을 구한다.
            Wend
            Label1.Caption = Total
      End Sub


 
 마. Do∼Loop 문   
    조건이 True인 동안 또는 True가 될 때까지 한 블록의 문을 반복한다.
              

Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]
Loop
또는 다음과 같은 구문을 사용할 수도 있다.
Do
[statements]
[Exit Do]
[statements]
Loop [{While | Until} condition]


 
     Do∼Loop 문은 다음과 같은 구성 요소로 되어 있다.
 

구성 요소
설              명
condition
 선택. True이거나 False인 수식이나 문자식이다.
 condition이 Null이면 condition은 False로 처리된다.
statements
 condition이 True인 동안 또는 True일 때까지 반복되는 하나  이상의 문이다.


 
     Do...Loop를 종료하기 위한 대체 방법으로서 Exit Do 문을 얼마든지 Do...Loop의 어느 곳에서나 사용할 수 있다. Exit Do는 If...Then과 같은 어떤 조건을 평가한 후에 사용하는 경우가 많다. 그럴 경우 Exit Do 문은 Loop 바로 다음에 오는 문에 제어를 전송한다.
     중첩된 Do...Loop문 내에서 사용되는 경우 Exit Do는 Exit Do가 발생하는 루프보다 한 중첩 위인 루프로 제어를 전송한다.
 
     다음의 예제는 Do...Loop 문이 어떻게 사용되는지 보여준다. 내부의 Do...Loop 문은 10번을 반복하여, 플래그의 값을 False로 설정하고, Exit Do 문을 사용하여 조속히 종료한다.
  

      Dim Check, Counter
      Check = True: Counter = 0          '변수를 초기화한다.
      Do                                 'Outer loop.
            Do While Counter < 20        '내부 루프이다.
                  Counter = Counter + 1   '카운터를 증가한다.
                  If Counter = 10 Then    '조건이 True이면
                        Check = False     '플래그 값을 False로 설정한다.
                        Exit Do           '내부 루프를 종료한다.
                  End If
            Loop
      Loop Until Check = False            '외부 루프를 즉시 종료한다.


 
 바. Exit 문
    Exit 문은 반복 중이나 수행 중에 종료해야 할 경우에 사용한다. Exit문은 정상적인 종료보다는 조건에 따라 반복을 종료한다든지, 프로시저를 종료할 때 사용한다.
 
   Exit문은 다음과 같은 형태로 되어 있다.
 


설     명
Exit Do
Do...Loop 문을 종료하는 방법을 제공하며, Do...Loop문 안에서만 사용할 수 있다. Exit Do는 Loop문 다음의 문에 제어를 전송한다.
중첩된 Do...Loop 문 내에서 사용될 경우 Exit Do는 Exit Do가 발생하는 루프보다 한 중첩 위인 루프로 제어를 전송한다.


 


설     명
Exit For
For 루프를 종료하는 방법을 제공하며 For...Next나 For Each...Next 루프에서만 사용할 수 있다. Exit For는 Next문 다음의 문에 제어를 전송한다. 중첩된 For 루프 내에서 사용될 경우 Exit For는 Exit For가 발생하는 루프보다 한 중첩 위인 루프로 제어를 전송한다.
Exit Function
Function 프로시저를 바로 종료할 때 사용한다.
Function을 호출한 문 다음에 오는 문으로 실행이 계속된다.
Exit Property
Property 프로시저를 바로 종료할 때 사용한다.
Property 프로시저를 호출한 문 다음에 오는 문으로 실행이 계속된다.
Exit Sub
Sub 프로시저를 바로 종료할 때 사용한다.
Sub 프로시저를 호출한 문 다음에 오는 문으로 실행이 계속된다.


 
   아래 예제는 Exit 문을 사용하여 For...Next 루프, Do...Loop, Sub 프로시저를 종료한다.
  

  Sub ExitStatementDemo()
  Dim I, MyNum
  Do                                 '무한 루프를 설정한다.
     For I = 1 To 1000               '1000번을 반복한다.
         MyNum = Int(Rnd * 1000)   '무작위 수를 만든다.
         Select Case MyNum         '무작위 수를 평가한다.
               Case 7: Exit For      '7이면 For...Next를 종료한다.
               Case 29: Exit Do      '29이면 Do...Loop를 종료한다.
               Case 54: Exit Sub     '54이면 Sub 프로시저를 종료한다.
          End Select
     Next I
  Loop
  End Sub


 
 
7. 프로시저와 함수
 
  프로시저와 함수가 없다면 프로그램을 작성할 때마다 모든 코드를 다시 재작업해 주어야 하는 심각한 사태가 벌어진다. 그러므로 프로시저와 함수는 자주 사용되는 코드의 집합을 하나의 명령과 같이 사용할 경우에 작성하게된다.
  비주얼 베이직에서는 다른 고급 언어들과 마찬가지로 프로시저와 함수를 구별하고 있다. 함수와 프로시저를 구별하지 않는 언어는 C/C++과 어셈블리어 밖에는 없다. 그러면 프로시저와 함수의 정의에 대해서 알아보고 작성하는 방법에 대해서도 알아보자.
 
 가. 프로시저
     프로시저는 일정한 기능을 수행하는 코드 덩어리이다. 프로시저는 일을 수행하기 위해서 매개 변수를 입력받을 수 있다. 그러나 일을 수행한 후 결과값은 받을 수 없다. 결과값을 받고자 한다면 함수를 사용해야 한다. 그러면 프로시저 정의에 대해서 알아보도록 하자. 비주얼 베이직에서 프로시저를 정의하는 방법은 다음과 같다.
          

 [Private | Public | Friend] [Static] Sub 프로시저이름 [(매개변수)]
     실행코드
     [Exit Sub]
     실행코드
 End Sub


     [Private | Public | Friend]는 제한자이다. 여기서 제한자를 선언하지 않아도 된다. 제한자를 사용하지 않을 경우에는 내부적으로 public으로 선언하게 된다. 비주얼베이직에서 흔히 볼 수 있는 이벤트 핸들러 역시 일종의 프로시저라고 생각하면 된다.
     다음은 프로시저의 예이다.
 

  Sub SubComputeArea(Length As Long, TheWidth As Long)
     Dim Area As Double                   '지역 변수를 선언한다.
     If Length = 0 Or TheWidth = 0 Then
                                            '인수 중 하나 = 0이면
         Exit Sub                           '즉시 Sub을 종료한다.
     End If
     Area = Length * TheWidth             '직사각형 면적을 계산한다.
 End Sub


 
 나. 함수
    함수는 프로시저와 비슷한 기능을 가지고 있다. 그러나 프로시저와는 달리 연산 결과의 리턴값을 받을 수 있다.
    함수에서는 연산의 결과값을 돌려주는 방법으로 자신의 이름을 사용한다. 이것은 함수도 일종의 포인터이기 때문에 가능한 것이다. 그러므로 함수를 사용할 경우 함수명 뒤에 리턴되는 데이터의 크기를 명시해주어야 한다.
 
    함수의 사용 형식은 다음과 같다.
 

  [Public | Private | Friend] [Static] Function 이름 [(매개변수)] [As 데이터형]
     실행코드
     [자신의 함수명 = 수식]
     [Exit Function]
     실행코드
 End Function


 
 다. 변수의 범위와 매개 변수 전달 방법
    흔히 함수나 프로시저를 사용하여 매개 변수를 전달하는 경우에는 값에 의한 전달 방법(Call By Value)과 주소에 의한 방법(Call By Reference)이 사용된다.
    일반적으로 변수는 그 범위(Scope)의 영향력에 따라 지역 변수와 전역 변수로 구분된다. 전역 변수는 말 그대로 변수가 전역적으로 영향을 끼치는 변수를 말한다. 비주얼 베이직에서 일반 선언부에 변수를 지정하게 되면 전역 변수가 된다. 전역 변수로 선언된 변수는 결과적으로 소스의 어디에서나 액세스가 가능하게 된다. 바로 범위(Scope)가 전역적으로 되는 것이다.
    지역 변수는 범위가 특정 부분에만 국한되는 변수를 말한다. 즉 특정 이벤트핸들러나 프로시저에서 선언한 변수는 선언된 위치 밖의 장소에서 액세스할 수 없다. 그러나 프로시저 앞에 Static과 같은 제한자가 사용되면 프로시저의 모든 변수들은 전역 변수가 된다.
    프로그램을 작성하다 보면 함수나 프로시저의 결과값이 변수에 영향을 주어야 할 때도 있고 주지 말아야 할 때도 있다. 그래서 넘겨지는 매개 변수를 값에 의한 호출을 이용할 것인가 아니면 주소에 의한 호출을 할 것인가를 결정해야 한다. 기본적으로 비주얼 베이직에서는 주소에 의한 전달 방법을 디폴트로 하고 있다. 그렇기 때문에 값에 의한 전달 방법을 사용하고자 한다면 ByVal이라는 예약어를 매개 변수 앞에 사용해 주어야 한다.
                     

sub 프로시저명 (ByVal 매개변수)
     ..
End Sub


 
 
 
8. 파일 핸들링
 
 가. open 문
     파일은 사용하기 전에 반드시 파일을 열어야 한다. open문은 파일을 사용하기 위해 사용하는 문이다.
 
     (형식)  open 파일명 for 파일의 모드 as 파일 번호
      ▷파일명 : 열고자 하는 파일의 이름
      ▷파일의 모드 : 파일을 어떤 용도로 사용할 것인가를 결정해 줌.
         모드에는 input(입력), output(출력), append(추가) 등이 있다.
      ▷파일 식별 번호 : 파일을 다루기 위해서는 반드시 파일 식별 번호를 부여해야 한다. #1부터 부여할 수 있지만 여러 가지 파일을 한꺼번에 다루기 위해서는 임의의 파일 번호를 시스템이 직접 부여해 주는 방법이 좋다.
       예)
                     

Dim fileNo

fileNo = FreeFile


 
 나. input 문
    디스크파일에서 메인 메모리로 데이터 읽기 형식
    input #파일번호, 변수, [,변수]
 
    line input #파일번호, 변수
    -파일번호 : open된 파일의 참조번호
    -변    수 : 디스크 파일에서 한 레코드를 읽어올 변수
 
 다. print 문
    Open한 파일에 데이터를 순차적으로 저장하는 구문.
   (형식 1) print [#파일번호],[데이터 저장 장소]
  

Dim fileno                          '파일번호 난수를 위한 변수 선언
fileno = FreeFile                    '파일번호 난수로 선언하게 함
Open "C:\test.txt" For Output As fileno   '데이터를 저장할 파일 오픈
Print #fileno, txtOutput,text          '열려진 파일번호의 데이터를 모두
                                     txtOutput,text에 저장


   (형식 2) 파일에서 정보를 입력받아서 다시 파일로 출력할 경우
         Open "데이터명.확장자명" For Input As #1
         Open "데이터명.확장자명" For Output As #2
         Input #1, 입력받을 수치를 저장한 변수
         …
         …
         Print #2, 출력할 변수
         Close #1
         Close #2
 
   (형식 3)
        Write #파일번호, 레코드
        Print #파일번호, 레코드
        Print #파일번호 using x$, 레코드
 
        -파일번호 : Open 된 파일의 참조번호
        -레코드 : 디스크 파일에 기록될 자료
 
 라. close 문
    open문으로 열려진 파일을 닫을 때 사용하는 문이다.
 
   (형식)
   Close [Open문에서 사용한 파일 번호]



image


 
 


 

이전글 2. Visual Basic의 기본 조작