[혈변강의 엑셀VBA] 6강: 스핀단추와 데이터 입력 by storm

이번 6강에서는 컨트롤 중에서 스핀단추에 대해서 알아보고, 또 유저폼의 각 컨트롤들이 보유하고 있는 데이터를 지정된 시트의 셀에 입력하는 방법에 대해서 알아보도록 한다. 참고로 본 강좌는 지난 4강 때부터 사용해온 예제파일을 계속 이어서 사용하고 있으므로, 4~5강을 보지 않은 분들은 먼저 4강부터 차례로 보면서 예제파일에 직접 코드를 입력해가면서 내용을 이해한 후에 본 강좌를 보기 바란다. (4강 링크: http://sstorm.egloos.com/5335895)

아크로뱃 리더 다운로드: http://get.adobe.com/kr/reader/
강좌 다운로드: VBA_6.pdf


덧글

  • 김규수 2010/08/30 16:50 # 삭제 답글

    대박 도움 감사합니다. VBA 진짜 하나도 몰랐는데, 6강까지 따라오니 짧은 시간 안에 많은 내용을 재밌게 배우게 됐습니다. 계속 기대하겠습니다~^^
  • storm 2010/08/30 17:40 #

    네 그렇군요. 앞으로도 강좌 계속 즐겨봐주세요 :)
  • 간지오딘 2010/09/02 22:22 # 답글

    안녕하세요^^ 하나하나 따라하면서 배우다 보니까 점점 재밌어 지는것 같아요 ㅎㅎ
    이걸 어떤데다가 써먹을 수 있나 잘 모르겠었는데 검색하다가
    스톰님이 만드신 채광 시뮬레이터 보고 또다시 감탄-_-!!! 오오오!!
    엑셀은 무궁무진한거군요 ㅎㅎㅎ
  • 간지오딘 2010/09/02 22:22 # 답글

    아 그리고 6강 하다가 질문이요!
    다른건 다 되는데 아이템 수정할 때 이상하게 등급수정이 안되더라구요``;;
    Worksheets("itemDB").Cells(lstName.ListIndex + 2, 3) = cmbGrade.ListIndex
    로 짰는데요 아이템 이름이나 가격은 저런식으로 짜도 수정이 되는데
    등급은 아이템 입력 버튼을 클릭하면 수정하기 전 등급으로 돌아가더라구요
    새로 등록하는건 되는데 이건 안되니까 더더욱 모르겠어요-_-a 가르침을 주세요~~^0^
  • storm 2010/09/06 13:19 #

    안 그래도 7강 작업하면서 해보니까 이상하네요^^;
    해결책은 7강에서 알려드리도록 하겠습니다.
  • gump 2010/09/06 16:43 # 삭제 답글

    게임 지망생에게 쪽지가 와서 ....
    어떻게 해야 하나요? 라는 질문이 들어와서
    스톰님 이글루 알려드렸어요 ㅋ
    (이런 좋은 방법을 그 동안 왜 몰랐을까요? 후후후; )
  • storm 2010/09/06 18:24 #

    아놔 껌푸님!!!
  • 2010/09/20 14:58 # 삭제 답글 비공개

    비공개 덧글입니다.
  • storm 2010/09/20 15:32 #

    아직 쓰다 말아서요. 오늘 밤에 올려볼게요 :)
  • 에스프가르데 2010/09/25 18:58 # 삭제 답글

    오늘도 좋은 강의 듣고 갑니다 :)!!
  • 탱자 2010/10/11 14:46 # 삭제 답글

    Private Sub SpinPrice_Change()

    If bNewOrMod = False Then
    Worksheets("itemDB").Cells(ListName.ListIndex + 2, 5) = TextPrice
    Else
    End If

    End Sub

    강의에 없던 위 구문을 Spin버튼 Change() 함수에 넣었는데, 수정값에 반영되는 타이밍이 한박자씩 느립니다. 유저폼에는 5000->5001->5002->5003 으로 바뀌었다면, 실제 엑셀 시트는 5000->5000->5001->5002 로 따라옵니다. 아마 Change() 가 반응할 때, 이전에 유저폼에 있던 값들을 버퍼에 넣고 있다가 반영하는 듯 싶은데 이 문제를 해결할 수 있는 방법 없나요?
  • storm 2010/10/11 23:19 #

    TextPrice는 변수명인가요 아니면 TextPrice라는 텍스트 상자의 값을 말하는 것인가요. 만약 TextPrice가 텍스트 상자의 이름이라면, TextPrice.Value 라고 속성을 지정해줘야 하구요.

    그리고 스핀버튼이 Change 이벤트 프로시저에 셀 데이터 입력 동작을 연결하는 것은 바람직하지 않습니다. 좀 번거롭더라도 스핀버튼의 Change 이벤트 -> 연결된 텍스트 박스의 값 변경 변경된 값을 셀에 반영 하는 식으로 코드를 짜는 게 좋습니다.
  • storm 2010/10/11 23:20 #

    그리고 VBA 초보자의 경우 스핀버튼 이벤트는 SpinUp 과 SpinDown을 쓰는 것이 오류를 방지하는 길입니다. 프로시저의 수가 늘긴 하지만 다른 프로시저나 메소드와 충돌하는 오류는 거의 방지할 수 있습니다.
  • 탱자 2010/10/12 10:07 # 삭제

    아 그렇군요. Change 이벤트에 셀 데이터를 변경하는 동작은 권장되지 않는가 보군요.

    아 TextPrice 가 아니라, TextPrice.Text 였습니다.^^; 죄송합니다.


    그런데 말씀 주신,
    "스핀버튼의 Change 이벤트 -> 연결된 텍스트 박스의 값 변경 변경된 값을 셀에 반영 하는 식으로 코드를 짜는 게 좋습니다." 는 무슨 뜻이신지요? 스핀버튼으로 인한 값 변경과 셀업데이트는 순차적으로 ㅇ리어나게 코딩하는게 좋다는 뜻인지요~?^^

    (아, 저도 스톰님 강좌대로 SpinUp/SpinDown 을 이용해서 TextBox 의 값이 변경되게 해놓았으니, 실제 엑셀 시트를 업데이트 하는 동작을 버튼을 통하지 않고, 실시간으로 반영되게 코딩하고 싶었던 것입니다. 메소드는 오히려 하나 더 늘었지요^^;)
  • storm 2010/10/12 10:24 #

    스핀버튼으로 인한 값변경과 셀 업데이트를 순차적으로 하는 것도 중요하지만, 스핀버튼의 Change 이벤트의 경우, 사용자가 스핀버튼을 조작하지 않아도 스핀버튼의 값(value 속성)이 변경(chage)될 수 있기 때문입니다.
  • 탱자 2010/10/12 10:07 # 삭제 답글

    그런데 TextBox 에 가지고 있는 값이 숫자 텍스트 값인 것 같은데, 엑셀 시트에 입력되게 하려면... Value 속성에 값을 넣어야 하는 것인가요?
  • storm 2010/10/12 10:22 #

    텍스트 상자의 경우는 Value = Text 나 마찬가지입니다. 하지만 상자에 입력되는 값이 수치라면 value 속성을 쓰는 것을 권장합니다. 뭐 그렇게 하지 않아도 별 문제는 없지만요.
  • 기차 2010/12/21 15:31 # 삭제 답글

    힘겹게 힘겹게 따라 가고 있습니다.
    4강 까지는 쉽게 왔는데.
    5강 부터 더텨지네요.
  • 좋네요 2011/03/30 08:05 # 삭제 답글

    저 수업을 열심히 하루하루 보고 있는데요...
    6강이 다운이 안받아지는데 이유가 있을까요?
    링크가 잘 못 걸려있나요?
  • storm 2011/03/30 09:07 #

    제가 방금 눌러봤는데 잘 되는데요 ㅇㅅㅇ);
    링크 우클릭으로 다운 받아보세요.
  • 좋네요 2011/04/05 12:54 # 삭제 답글

    음... 다시 해봤는데요
    이것만 안 받아지네요...
    왜 안되는지 모르겠는데 아마 사무실 방화벽이 이것만 걸리는것 같아요
    제가 어떻게 받을 방법이 좀 있을까요?
  • storm 2011/04/05 13:13 #

    메일 주소 알려주시면 보내드리겠습니다.
  • 좋네요 2011/04/06 07:37 # 삭제 답글

    감사합니다
    제 메일주소는 sirius4lee@gmail.com 입니다
    여기서 배운걸로 도움이 많이 되서 가위바위보랑 로또 게임 만들어봤어요..
    이젠 룰렛 게임 만들어보려합니다
    도움 많이 되네요 정말...
  • storm 2011/04/06 09:08 #

    메일로 보내드렸습니다
댓글 입력 영역



통계 위젯 (화이트)

227
115
511472