책 내용 질문하기
프로시저 문제
도서
[2014] 컴퓨터활용능력 1급 실기(엑셀, 액세스 2007 사용자용)
페이지
450
조회수
74
작성일
2015-03-31
작성자
첨부파일

제가 쓴 프로시저랑 교재 프로시저 내용이 완전 같은것 같은데

자꾸 에러가 발생합니다.

Private Sub cmd등록_Click()
If cmb제품명 = " " Then
MsgBox "제품명을 선택하세요.", vbOKOnly, "제품명"
ElseIf txt수량 = " " Then
MsgBox "수량을 입력하세요.", vbOKOnly, "수량"
Else
입력행 = [a4].Row + [a4].CurrentRegion.Rows.Count
참조행 = cmb제품명.ListIndex + 5
Cells(입력행, 1) = cmb제품명
Cells(입력행, 2) = txt수량
Cells(입력행, 3) = Cells(참조행, 8)
Cells(입력행, 4) = Cells(참조행, 9)
Cells(입력행, 5) = txt수량 * Cells(참조행, 8)
End If
End Sub
이 노란부분에서 에러가 있다고 나오고,
공백상태에서 등록을 눌러도 메시지박스가 안뜨고 계속 값이 입력되요.
뭐가 문제인지 확인해주시면 감사하겠습니다.
====================
그리고 맨 위 cmb제품명 = " "부분을
isNull(cmb제품명.value) 로 쓸 수 없나요?
교재 347쪽에는 isNull(lst열차종류.value)를 쓸 수 있었어서 될 줄 알았거든요
========================
cmb등 콤보상자가 선택이 안될 경우는 cmb제품명 = " " 으로 써서
if cmb제품명 = " " then
msgbox ... 이렇게 쓰더라구요.
List등 리스트가 선택이 안된 상태를 lst제품명 = " "으로 쓰기도 하는 것 같은데
선택 안되었을 시 if/ msgbox 쓰면 안나오더라구요.
반드시 isNull(lst제품명.value)라고 써야 그제서야 msgbox로 나오는것 같더라구요.
반대로 콤보상자는 선택안되었을때 msgbox나오게 하는거에 isNull을 못쓰더라구요.
왜그런건가요?
왜 lst는 lst = " "로 쓸 수 있으면서 msgbox에서는 isNull밖에 못쓰는이유와,
cmb는 msgbox에서 isNull을 쓸 수 없는지 궁금합니다.
그리고 자세한 설명 부탁드려요. 항상 복사, 붙여넣기 느낌이 들어서요.
답변
2015-04-01 10:04:25
Private Sub cmd등록_Click()
If cmb제품명 = " " Then
MsgBox "제품명을 선택하세요.", vbOKOnly, "제품명"
ElseIf txt수량 = " " Then
MsgBox "수량을 입력하세요.", vbOKOnly, "수량"
<- " " 가 아니라 "" 로 입력해야 아무것도 입력되지 않았을때 메시지가 표시됩니다.
Else
입력행 = [a4].Row + [a4].CurrentRegion.Rows.Count
참조행 = cmb제품명.ListIndex + 5
Cells(입력행, 1) = cmb제품명
Cells(입력행, 2) = txt수량
Cells(입력행, 3) = Cells(참조행, 8)
Cells(입력행, 4) = Cells(참조행, 9)
Cells(입력행, 5) = txt수량 * Cells(참조행, 8)
End If
End Sub
위의 부분을 지정하고 나면 다른 오류는 없네요.

액세스는 txt이름을 참조했을 때는 단순한 컨트롤이 아니라 바운드된 필드를 찾게 됩니다.

그래서 필드의 초기값은 Null이므로 값을 입력하지 않은 것은 IsNull로 검사하는게 맞습니다.

엑셀에서는 컨트롤에 등록된 내용을 바로 확인 하기 때문에 cmb제품명 = "" 와 같이 사용하는 것입니다.

lst 박스부분에서는 바운드된 값을 이용하기때문에 isnull을 사용하는 경우가 많구요.

어떻게 작성하시든 코드가 정상실행되어 정확한 결과가 나온다면 상관 없습니다.

좋은 하루 되세요.

"
  • *
    2015-04-01 10:04:25
    Private Sub cmd등록_Click()
    If cmb제품명 = " " Then
    MsgBox "제품명을 선택하세요.", vbOKOnly, "제품명"
    ElseIf txt수량 = " " Then
    MsgBox "수량을 입력하세요.", vbOKOnly, "수량"
    <- " " 가 아니라 "" 로 입력해야 아무것도 입력되지 않았을때 메시지가 표시됩니다.
    Else
    입력행 = [a4].Row + [a4].CurrentRegion.Rows.Count
    참조행 = cmb제품명.ListIndex + 5
    Cells(입력행, 1) = cmb제품명
    Cells(입력행, 2) = txt수량
    Cells(입력행, 3) = Cells(참조행, 8)
    Cells(입력행, 4) = Cells(참조행, 9)
    Cells(입력행, 5) = txt수량 * Cells(참조행, 8)
    End If
    End Sub
    위의 부분을 지정하고 나면 다른 오류는 없네요.

    액세스는 txt이름을 참조했을 때는 단순한 컨트롤이 아니라 바운드된 필드를 찾게 됩니다.

    그래서 필드의 초기값은 Null이므로 값을 입력하지 않은 것은 IsNull로 검사하는게 맞습니다.

    엑셀에서는 컨트롤에 등록된 내용을 바로 확인 하기 때문에 cmb제품명 = "" 와 같이 사용하는 것입니다.

    lst 박스부분에서는 바운드된 값을 이용하기때문에 isnull을 사용하는 경우가 많구요.

    어떻게 작성하시든 코드가 정상실행되어 정확한 결과가 나온다면 상관 없습니다.

    좋은 하루 되세요.

    "
· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.