2009-01-06 3 views
3

저는 80 명 정도의 사용자를 위해 Word VBA 매크로 앱을 만들고 있습니다. 사무실 직원의 이직률이 높기 때문에 교육이 어려워 지므로이 프로젝트에 대한 자체 부과 된 요구 사항 중 하나는 포괄적 인 친숙한 문서입니다. 그러나 이것을 보완하고 새로운 것을 시도하고 싶을 때 100 페이지짜리 문서를 열어야하는 초보자를 구하기 위해 상황 별 도움말을 제공하는 모든 사용자 폼 (5 개가 있음)에 상태 표시 줄이 필요합니다. 나는 귀찮은 툴팁을 발견한다.VBA 상태 표시 줄

내가 경험이 많지 않아, 그래서 기본적으로

하고자했다, 나는 모든 상태 문자열이 포함 된 파일이 있습니다. (이것은 현재 텍스트 파일이지만 미래에 다른 스탭이 쉽게 편집 할 수 있도록 스프레드 시트 나 CSV를 사용해야하는지 궁금합니다.) 모든 컨트롤에는 다음과 같은 함수를 나타내는 MouseMove 이벤트가 있습니다. getStatus (cID) 파일, 줄을 잡고 상태 레이블에 표시합니다. 또한 파일에서 같은 줄의 몇 가지 매개 변수 (예 : 도움말 파일의 페이지에 링크하기 위해 레이블을 클릭 할 수 있는지 여부)와 레이블의 색을 지정합니다.

그래서 몇 가지 질문에 정말 : 사용자 정의 폼이 지속적으로 파일을 참조하는 경우

응용 프로그램이 느려질 수 있을까요? 그것은 나에게 잘 느껴지지만, 나는 너무 오랫동안 그곳에 있었고, 나는 그 파일에 접근하는 유일한 사용자이다. 80 명이 끊임없이 접속할 것입니다.

MouseMove가 컨트롤보다 좋은 방법입니까? 대신 좌표를 사용해야합니까?

가장 중요한 것은 (가능한 한 작은 작업을해야한다는 측면에서) 모든 단일 컨트롤에서 MouseMove 이벤트를 가질 필요가 없도록하는 방법이 있습니까? 나는 각각 수 백개 정도의 좋은 컨트롤을 가지고 있는데, 각각은 자신의 식별자를 가지고있다. (글쎄, 아직은 아니지만, 이것이 이것을 할 수있는 유일한 방법 일 것이다.) 어쩌면 폼이로드 될 때 가능한 모든 상태 라인을로드 할 수 있으므로 컨트롤이 마우스 오버 될 때마다 준비됩니다. 그렇다면 로딩 시간은 무시할만한 수준일까요?

VBA가 이미이 작업을 수행하는 데 필요한 모든 기능을 갖추고 있으며 휠을 재발 명하려고하는 경우 특히 유용합니다. 사용자가 응용 프로그램 자체를 거의 볼 수 없기 때문에 응용 프로그램 상태 표시 줄을 사용할 수 없습니다.

감사합니다.

편집 :

그것은 주위를 클릭 모두 데이터 입력 및 문서 생성의 비트입니다.

이 매크로 보안 문제는 나에게 큰 문제가되지 그래서 통제 된 환경이다 - 뭔가가 잘못되면 그것은 다른 사람의 잘못이나 문제 :

답변

2

이 데이터 입력 응용 프로그램입니다입니다 아니면 그냥 물건을 클릭 할 ? 종종 초점이있는 필드가 마우스가 가리키고있는 항목과 다르기 때문에 많은 혼란을 야기 할 수 있습니다.

파일을 지속적으로 읽는 것은 시간과 리소스를 낭비하는 결과를 가져옵니다. 폼을로드 할 때 배열이나 컬렉션에 한 번만로드하는 것이 훨씬 좋습니다.

On MouseMouse 이벤트는 걱정하지 않고 주변을 이동할 수 있으므로 좌표보다 좋습니다. 많은 코드가 있지만 코드가 동일해야하므로 컨트롤 이름 목록이있는 경우 대부분을 생성 할 수 있어야합니다.

Sub Control_MouseMove() 
    DisplayStatus(Control) 
End sub 
+0

그래, 필자는 필드의 keydown이 해당 필드의 helptext를 반영하도록 상태를 변경하기로 결정했습니다. 그래서 마우스를 움직이면 여전히 상태가 바뀔 것입니다. 대부분의 사람들은 타이핑을하지 않고 마우스를 동시에 움직이기를 바랍니다. :) – user51498

1

즉, 내가 도움이 종류의 컨트롤의 STATUSTEXT 속성과 ControlTipText 속성을 고려할 것입니다.

StatusText 이 예제에서는 "Age"라는 양식 필드의 상태 표시 줄 도움말 텍스트를 설정합니다.

With ActiveDocument.FormFields("Age") 
    .OwnStatus = True 
    .StatusText = "Type your current age." 
End With 

ControlTipText 이 제어는 속성 시트에서 할당 될 수있다.

Private Sub UserForm_Initialize() 
    MultiPage1.Page1.ControlTipText = "Here in page 1" 
    MultiPage1.Page2.ControlTipText = "Now in page 2" 

    CommandButton1.ControlTipText = "And now here's" 
    CommandButton2.ControlTipText = "a tip from" 
    CommandButton3.ControlTipText = "your controls!" 
End Sub