1. FAQ
  2. 엑셀(Excel)
  3. AfterEffects
  4. Premiere
  5. Photoshop
  6. ETC

이 게시판은 아별닷컴 회원만 질문을 올릴 수 있습니다. 회원에게 주어지는 특권인셈이지요. 회원이 아닌 분들은 열람만 가능합니다.

안녕하세요. 질문이 하나 있는데요

엑셀 안에서 버튼을 누르면 (예를 들어) 외부의 특정 어플리케이션을 구동시키는 방법은 무엇인가요?

DDE를 사용해야 하나요? 궁금합니다.

외부 어플리케이션은 Spotfire 라는 툴인데요 엑셀 데이터를 읽어서 시각적인 화면을 구현하는 툴이구요

제가 하고자 하는 것은 엑셀에서 필요한 데이터를 작성하고 버튼을 누르면 Spotfire가 작동하여 바로 실행되는 모습을 구현하고 싶답니다.

뜬금없는 질문 같기는 한데 한수 지도 부탁드립니다.

 

엑셀은 2007이구요 샘플파일은 없습니다.


댓글 '7'

profile

[레벨:30]아별

2012.02.09 00:53:52
*.130.73.75

외부 어플리케이션 실행 시키는 것은 Shell 함수를 사용하시면 됩니다.

 

Sub appCalc()
    Dim RetVal
    RetVal = Shell("calc.exe", vbNormalFocus)    ' 계산기를 실행합니다.
End Sub

 

 

엑셀 도움말에 자세히 설명되어 있습니다.

 

abyulTools_0000308.jpg

 

첨부

[레벨:3]엑셀대단해

2012.02.13 17:42:12
*.173.111.76

역시 정말 감사합니다.

아직 부족한 부분이 많아서 좋은 기능들이 있어도 몰라서 사용하지 못하는 경우가 많이 있습니다.

앞으로도 많은 사사 부탁드립니다.

 

한가지 더 풀지못한 숙제가 있는데요.... 다른 곳에서 문의를 했으나 답을 얻지 못한 것입니다.

엑셀에 데이터 입력을 위해 폼을 생성하여 사용하고 있는데 이미 Load되어 있는 폼을 그대로 두고 다른 폼을 띄우는 버튼을 클릭했을때 현재 Laod되어 있는 폼이 있는지 인식하여 자동으로 Unload 시키고 싶습니다.

그렇지 않으면 폼이 겹치기로 띄워져서 곤란한 경우가 발생합니다. (첨부한 이미지 참조)

각 시트별로 Load 되는 폼이 다르므로 어떤 시트가 활성화되었느냐에 따라 필요한 폼만 남겨둘 수도 있습니다.

해결할 방법을 알고 싶습니다.

감사합니다.


그림1.png

 

첨부
profile

[레벨:30]아별

2012.02.14 11:08:22
*.104.126.21

엑셀대단해님.. 안녕하세요?


음..

기존 열려 있는 폼을 인식해서 닫고 싶으시다구요?


일단.. 대단해님이 전문 프로그래머가 아니시라는 가정하에.. 

단순한 방법을 알려드리겠습니다. 프로그래머가 본다면 무식한 방법이라고도 할 수 있지요.. ^_^;; 

하지만 제일 단순하고 쉽습니다.


어떤 폼을 열기 전에 아래와 같이 열려 있을 수 있는 유저폼을 전부 닫아버린 다음.. 새로운 유저폼을 Show해주면 됩니다.

if문을 이용해서 조건을 넣을 수도 있구요.. 쉽지요? ㅎㅎ


Sub unloadAllUserForms()

    On Error Resume Next

    If ActiveSheet.Name <> "abyul1" Then Unload ufrmAbyul1

    If ActiveSheet.Name <> "abyul2" Then Unload ufrmAbyul2

    If ActiveSheet.Name <> "abyul3" Then Unload ufrmAbyul3

    If ActiveSheet.Name <> "abyul4" Then Unload ufrmAbyul4

    If ActiveSheet.Name <> "abyul5" Then Unload ufrmAbyul5

    On Error GoTo 0

End Sub


== 절 취 선 ==============================================


자.. 위에껀 사실 꼼수구요..

열려있을 수 있는 유저폼이 몇 백개 된다면.. 프로그램 효율이 떨어지겠지요?

솔직히 몇백개가 안되면 위와 같이 하셔도 별 문제 없습니다.


암튼.. 제대로 프로그래밍하려면 어떻게 해야하냐면요..

엑셀 VBA 자체의 기능으로는 안되구요.. Windows API를 사용하셔야합니다.


GetActiveWindow 함수를 이용해서 현재 활성창이 유저폼이면 닫아버린다든가.. 하면 되겠습니다.

또는 FindWindow 함수를 활용해 볼 수도 있구요..


API에 대해서는 개인적으로 공부를 하셔야할 겁니다.

제가 처음 API를 공부할때 자료들을 정리한 게시물이 있는데 그걸 참고해서 공부해보세요..

http://www.abyul.com/zbxe/71223


머.. VBA 프로그래밍에 재미를 느끼신다면 한번 API를 공부해보시구요..

그렇지 않다면.. 저 위에 설명해 드린 방법으로 구현하세요..


도움이 되셨기를.. ^^


[레벨:3]엑셀대단해

2012.02.14 13:48:58
*.173.111.76

고맙습니다.

정말 단순한 방법이 있다는 것을 왜 생각을 하지 못했을까요?

역시 고수와 하수의 차이인 듯 합니다.

일단 폼의 수가 적어서 해결이 되었구요 알려주신 API는 좀더 공부를 해서 결국은 API로 구현을 해 보겠습니다.

 

염치 없지만 한가지 더 질문을 드릴께요.

 

첨부한 화면처럼 사용자정의 리본메뉴를 생성하여 특별한 업무를 할 수 있도록 구성을 하였습니다.

이 메뉴는 한가지 업무에는 쓸모가 있으나 다른 파일을 다룰때는 용도가 없는 메뉴입니다.

물론 아별툴은 언제나 사용할 수 있는 범용이니까 괜찮지만 특별한 경우에 사용되는 이런 메뉴인 경우 항상 보이면 사용자가 싫어할 수도 있고 헷갈리기도 할 것 같습니다.

그래서 필요시에만 (예를들어 어떤 파일을 열때만 등등) 지정된 사용자정의 메뉴가 나타나게 할 수가 있을까요?

매번 필요시에마다 "옵션에 들어가서 추가기능을 활성/비활성해라" 라고 사용자에게 요구하기엔 프로그램 작성자로서의 자세가 아닌 것 같습니다.

가능할까요???


그림2.png

첨부
profile

[레벨:30]아별

2012.02.14 17:54:39
*.104.126.21

아.. 이것은.. 꼬꼬질.. +_+;;

꼬리에 꼬리를 무는 질문이군요.. ㅎㅎ


CustomUI까지 구성하시다니.. 꽤 고수급이신듯 싶습니다.

그 정도의 사전 지식이 있다는 가정하에 답변 드리겠습니다.


사용자 추가한 탭을 보이거나 숨기는 것은 getVisible 속성을 사용하시면 됩니다.

아래 링크에 가셔서 샘플 파일을 다운 받으시고.. 다운 받은 압축 파일 중에서 "Hide-Display-Tab.xlsm"파일을 참고해보세요.

http://www.rondebruin.nl/hidevisible.htm



위 파일을 다운 받아 보시면 아시겠지만..

리본메뉴 설정에 익숙하지 않으시면 잘 이해가 안 되실 수 있겠다 싶어서.. 

제가 설명을 좀 보태보겠습니다. (괜한 짓인가요? ^_^;;)



CustomUI Editor 프로그램에서..


<!-- 아래와 같이 onLoad에 RibbonOnLoad 프로시저를 지정해주시구요.. -->

<customUI onLoad="RibbonOnLoad" xmlns="http://schemas.microsoft.com/office/2006/01/customui">


<!-- 사용자가 추가하는 Tab에는 GetVisible 속성을 추가하세요.. 예제에서는 Tag속성을 사용해서 탭을 식별하게 했네요.. -->

  <ribbon> 

    <tabs>

      <tab id="MyCustomTab" label="My Tab" insertAfterMso="TabHome" getVisible="GetVisible" tag="MyPersonalTab" >



CustomUI Editor는 이제 닫으시구요..

엑셀창의 VB Editor에서.. 아래와 같은 코드를 작성하시면 됩니다.


Option Explicit


'### 공용 변수를 선언합니다.

Dim Rib As IRibbonUI

Public MyTag As String


'### 이 아이는 XML에서 onLoad 속성에서 정의해준 프로시저죠..

'### 현재 리본 오브젝트를 Rib로 정의합니다.

Sub RibbonOnLoad(ribbon As IRibbonUI)

    Set Rib = ribbon

End Sub


'### 탭을 보여주는 프로시저..

Sub DisplayRibbonTab()

    Call RefreshRibbon(Tag:="MyPersonalTab")

End Sub


'### 탭을 숨기는 프로시저

Sub HideEveryTab()

    Call RefreshRibbon(Tag:="")

End Sub



'### Visible에 대한 변수를 바꾸어도 바로 리본에 적용되지는 않습니다.

'### 처음 로드될때의 캐시값을 계속 사용하기 때문이죠.. Invalidate로 캐시값을 전부 무효로 만들어줘야 값을 갱신합니다.

Sub RefreshRibbon(Tag As String)

    MyTag = Tag

    If Rib Is Nothing Then

        MsgBox "Error, Save/Restart your workbook"

    Else

        Rib.Invalidate

    End If

End Sub



'### 변수에 따른 Visible을 리본에 반영하는 프로시저죠..

'### 바로 위의 RefreshRibbon 프로시저에서 Rib.Invalidate로 캐시값을 갱신해줄때 자동으로 호출이 됩니다.

Sub GetVisible(control As IRibbonControl, ByRef visible)

    If MyTag = "show" Then

        visible = True

    Else

        If control.Tag Like MyTag Then

            visible = True

        Else

            visible = False

        End If

    End If

End Sub




도움이 되셨기를.. ^^



ps. 이거 밥이라도 사셔야하는거 아닙니까!! ㅋㅋ

      농담입니다. ㅎㅎ


[레벨:3]엑셀대단해

2012.02.14 19:38:37
*.173.111.76

밥!!!

사겠습니다.

시간만 주시면 정말 만나뵙고 싶네요.

전 사무실이 구로디지탈단지에 있습니다.

 

사실 고수는 아니고 VBA 프로그램 손댄지 2개월정도 됩니다.

하다보니 더 잘하고 싶어서 계속 깊이 들어가게 되네요.

정말 아직 어떤 부분은 기초도 안되는 수준입니다.

꾸벅~~

profile

[레벨:30]아별

2012.02.15 12:10:58
*.104.126.21

대단해님.. SI업체에 계시군요!

전에 다니던 회사에서 오라클 ERP 셋업멤버였는데.. 그 때 고생한걸 생각하면.. 쿨럭.. ㅎㅎ

그런 노하우들이 있으시면 VBA는 금방 익히실 것 같네요..


VBA는 파면 팔 수록 재미있어요.. ^_^;;


조만간 아별닷컴 회원들 오프라인 모임이라도 추진할까봐요..

강남정도가 적당할듯 싶은데요.. ^_^;;

그래봤자.. 한 2~3분 오시지 않을까싶네요.. ㅎㅎ

날짜 잡으면 연락드리겠습니다~~ ^^


그리고 저는 한양대학교역 근처에서 근무합니다. ^^

주변에 오실일 있으시면 연락주세요.. ^^


오늘 하루도 즐거운 하루 되세요.. ^^)/

문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 공지 [공지] 아별닷컴의 엑셀 질문방 폐쇄합니다. 카페 질문방 이용하세요.. imagefile [레벨:30]아별 2015-04-23 42486
» VBA 외부 어플리케이션 실행 & 유저폼 일괄 닫기 & 리본 메뉴 사용자 추가 탭 숨기거나 보이게 하는 방법 [7] [레벨:3]엑셀대단해 2012-02-08 4681
381 엑셀일반 아별님 큰일 났습니다.ㅠㅠ [1] [레벨:2]연어빵 2012-02-04 2225
380 IF수식 특정조건에 만족이 되면 끝에 문자를 추가하는 방법 file [3] [레벨:4]부루끄 2012-02-02 3227
379 아별툴관련질문 아별 깔고나서 글이 안써져요 [1] [레벨:1]박주연 2012-02-02 2654
378 엑셀일반 아별을 깔면 이러네요.ㅠ.ㅠ 엑셀 창이 알트텝으로 검색이 안되요 imagefile [2] [레벨:2]큰아빠에요 2012-01-30 4360
377 아별툴관련질문 아별툴 설치시 오류...ㅠ.ㅠ imagefile [4] [레벨:1]House 2012-01-22 2857
376 IF수식 조건 함수문의 file [2] [레벨:3]블루짱이 2012-01-17 2516
375 아별툴관련질문 쥔장님! 오류가 나서요. 한번 봐주세요. [3] [레벨:1]함도 2012-01-17 2469
374 아별툴관련질문 아별툴을 설치 하고 나서 crtl+f 의 기능 중에.. [4] [레벨:2]큰아빠에요 2012-01-16 2857
373 엑셀일반 함수 관련 질문 드립니다. file [2] [레벨:3]블루짱이 2012-01-13 2500
372 엑셀일반 UDF에 의한 계산 결과 오류 [2] [레벨:0]엑셀의 초짜 2012-01-13 2883
371 엑셀일반 바꾸기 기능 file [4] [레벨:0]불꽃남자76 2012-01-12 2403
370 엑셀일반 [Ctrl + F] 찾기 관련 질문... [9] [레벨:4]나카타 2012-01-09 2530
369 엑셀일반 입력된 데이터의 끝으로 이동하는 방법이 궁금합니다. [1] [레벨:6]파이스 2012-01-09 4252
368 엑셀일반 엑셀 듀얼모니터 사용 시 붙여 넣기 문제 [2] [레벨:3]읍내꽃미남 2012-01-09 4469
367 테두리 두께 변경과 색상 입히기 file [2] [레벨:1]최선 2012-01-08 4372
366 엑셀일반 ㅠ-ㅠ [1] [레벨:3]빛의행운아 2012-01-03 2707
365 피벗테이블 질문하나 더 올립니다 file [6] [레벨:4]pgpoch 2012-01-02 2735
364 엑셀일반 구버전 호환모드로 로드 시, 계행문자 줄바꿈 저장 안되는 현상 관련 file [2] [레벨:6]파이스 2012-01-02 4229
363 엑셀일반 엑셀에서 가로 세로 바꾸기 입니다. file [2] [레벨:4]pgpoch 2011-12-30 3673