안녕하세요.. 이제 막 리습 기초?정도를 배우고있습니다.
리습을 배우다보니, 엑셀처럼 VBA가 적용? 가능하다는것도 알게되었는데요..
엑셀에서는 VBA를 몇번 다뤄봤는데.. 캐드에 적용하려니 완전 다른느낌이 들어서..
처음부터 알아보고있는데..인터넷에서 리습에비해 강좌 찾기도 어려운듯해서.. 좀 힘든것 같습니다 ㅠ.ㅠ
우선은 편하게? 입력받기 위해 VBA에서 간단한 폼을 만들고, 거기에 값을 입력하면 리습과 연동해서
캐드에서 출력하는 법을 알고 싶은데요..
우선 질문드리고 싶은것은,
위와같이 VBA로 폼을 만들어놓고, 값1,값2 란에 숫자 2개를 입력하면 결과값이 더해져서 명령창에 값이 나오는걸 해보고 싶습니다.
만약 1에 5, 2에 3을 입력하고, 실행을 누르면 아래와 같은 리습이 실행되서 8이라는 결과값을 출력되게 하는법을 알고싶은데요..
(defun c:add()
(setq a 값1) ;;값1은 윗 값1 텍스트란에 입력된 값
(setq b 값2) ;;값2은 윗 값2 텍스트란에 입력된 값
;;입력받았을 값 형태가 str인경우
(setq a (atoi a))
(setq b (atoi b))
;;입력받았을 값 형태가 str인경우
(setq c (itoa (+ a b)))
(prompt c)
)
대략적으로 저런 형식의 리습이 된다고 할때..
1. 텍스트칸에 입력받은 항목을 a라는 변수에.. 넣는 방법(VBA소스?) 과
2. 실행 버튼을 눌렀을때 저 add라는 리습이 실행되게 하는 방법..
3. 리습에서 저 UserForm1이라는 창을 호출하는 방법.. 이 있으면 알고싶습니다.
아시는분들은 초보적인 질문일듯하긴 하지만.. 혹시 아시는분은 답변이나, 참고링크 있으시면 부탁드리겠습니다.
공유
VBA (VIsual Basic for Applcation) 는 써드파티 제작을 위해
MS에서 제공하는 보조 프로그램 언어입니다.
캐드뿐만 아니라, 웍스나 엑셀, 파워포인트, 워드 등등
요즘 나오는 대부분의 프로그램들은 VBA를 기본으로 내장하고 있습니다.
하지만, 강력한 기능에도 불구하고, 약간의 난이도 때문에,
많은 캐드유저들이 잘 활용을 안하고 있는 실정입니다.
때문에 AUTOCAD용 VBA의 자료는 국내 웹사이트에 거의 없습니다.
그나마 이혁진 님이 운영하는 http://www.vbcad.co.kr/xe/
위의 사이트에 나름 정리되어 있는 자료가 있습니다만, 역시나 기초적인 수준의 가이드북 정도입니다.
(이 사이트의 게시글중에 님이 질문하신 것에 대한 답변이 될만한 자료가 있습니다.)
기본적인 공부는 이혁진 님의 사이트에서 가능하지만, 좀 더 실무적인 부분으로 넘어가면,
구글의 도움을 받는게 좋습니다.
외국자료중에는 참고할 만한 자료가 많이 있습니다. (영문 자료입니다.)
만약 영어의 벽이 높게 느껴지신다면, 국내 자료중에 EXCEL용 VBA자료가 많이 있습니다.
기본적인 문법구조가 완전 똑같기 때문에, EXCEL VBA를 먼저 배우는 것도 나쁘지 않습니다.
어차피 엑셀도 무지하게 많이 쓰는 프로그램이니까요.
1. 텍스트칸에 입력받은 항목을 a라는 변수에.. 넣는 방법(VBA소스?) 과
OPTION EXPLICIT
OPTION COMPARE TEXT
SUB TEST ()
DIM A AS VARIANT
A=TEXTBOX1.VALUE
END SUB
2. 실행 버튼을 눌렀을때 저 add라는 리습이 실행되게 하는 방법..
ThisDrawing.SendCommand (“add” & vbCr)
3. 리습에서 저 UserForm1이라는 창을 호출하는 방법.. 이 있으면 알고싶습니다…
(defun c:openform ( ) ;;; 리습에 작성할 코드;;;;;;;;;;;;;;;;;;;;;
(command “vbastmt” “ThisDrawing.openformvba”)
(princ)
);defun end;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
‘=============================
Sub openformvba() ” vba의 thisdrawing 개체 안에 들어갈 프로시져
userfrom1.show 1 ”’ 숫자 1 대신에 0을 써도 됩니다. 차이점은 테스트해보시면 압니다.
End Sub’=================================
기타 문의사항은 아래메일로 문의주세요.
warfire114@naver.com
답변 감사드립니다!
이미 강좌 들어가서 보고있었는데.. 제가 못본것일수 있으니 조금더 찾아보겠습니다!
2,3번같은 경우는 잘 해결되었습니다! 댓글주신것과 다른 글 참고해서 해보니 어느정도 되는것 같습니다.
근데 1번같은경우는.. 캐드 변수에 적용시키는것인데, 소스를 제가 잘 못한건지 잘 안되는것 같습니다..
우선 올려주신 소스를 해보니 캐드상에는 a라는 변수가 nil로 뜨네요 ..ㅠㅠ
A = TextBox1.Value 라고 한다면.. VBA내의 A라는 변수에 들어가는듯한데.. 제가 잘못 이해한건지 ㅠㅠ
만약 예를들어 텍스트 박스에 5라는 값을 입력하고 버튼을 누르면 캐드상에서 !a 라고 입력시 5라고 출력되게 하는 것인데..
혹시 제가 뭔가 잘못였는지 궁금합니다.
답변 정말 감사드립니다..
VBA에서 변수를 선언하는 선언문은 DIM 과 PUBLIC 으로 구분됩니다.
DIM 은 지역변수 선언문 – 프로시져를 벗어나면 변수를 메모리에서 버립니다.
PUBLIC은 전역변수 선언문 – 캐드가 실행되는 동안은 항상 메모리에 남아있고, 언제든 불러서 쓸수 있습니다.
일단, 텍스트박스의 값을 변경하는 프로시져와 커맨드컨트롤의 프로시져가 다르기 때문에,
이런경우에는 모듈 상단에 PUBLIC A AS VARIANT 로 전역변수를 선업합니다.
더불어 텍스트 박스의 값이 변하면, A라는 변수에 값을 입력해야 하므로
텍스트 박스가 포함된 폼의 코드입력창 우측에서 CHANGE 속성을 선택하면
텍스트 박스의 내용이 변할때마다 실행되는 프로시져를 작성할 수 있습니다.
Private Sub TEXTBOX1_Change() ” 물론 수동으로 작성해도 됩니다.
A=TEXTBOX1.VALUE
End Sub
Private Sub COMMANDBUTTON1_Click() ‘
msgbox A
End Sub
이런식으로 됩니다.
넵 친절한 답변 감사드립니다!!