2013-04-11 7 views
0

현재 문서를 저장하면 일부 처리를 수행하는 사용자 지정 Word 서식 파일을 작성하고 있습니다.Word VBA를 사용하여 Office2007에서 사용자가 선택하는 저장 기능을 감지합니다.

Office2007에서 문서를 저장하려면 저장 및 다른 이름으로 저장 기능을 사용하고 FileSave 및 FileSaveAs 매크로를 사용하여 이벤트를 처리 할 수 ​​있습니다.

사용자가 SaveAs 옵션을 가리키면 다른 하위 옵션이 표시됩니다. 문서로 저장, Word 템플릿으로, Word 97-2003 문서로 표시 등이 하위 옵션에는없는 것 같습니다. 그들 자신의 이벤트이지만, 사용자가 그들을 언제 사용하는지 알고 싶습니다.

그래서 DocumentBeforeSave 이벤트를 사용하는 아이디어가 떠오르지 만 표준 저장/저장 옵션 또는 하위 옵션으로 저장이 발생했는지 파악해야합니다.

DocumentBeforeSave 이벤트가 정상 저장 메서드 중 하나가 발생했는지 확인하기 위해 Save/SaveAs 함수에서 변수를 True로 설정하면 변수를 False로 되돌릴 수 있습니다.

하지만 다른 방법으로 실험 한 후에 ThisDocument와 BeforeSave 이벤트가있는 클래스 모듈간에 변수 값을 전달할 수있는 방법을 알 수 없습니다.

아이디어가 있으십니까? 감사!


편집 : 예제 코드가 작동하지 않습니다 :

은의 ThisDocument :

Public pSSave As Boolean 

Public Property Get SSave() As Boolean 
    SSave = pSSave 
End Property 

Public Property Let SSave(Value As Boolean) 
    pSSave = Value 
End Property 

Sub FileSave() 

Me.SSave = True 

If SSave = True Then 
    MsgBox "True" 
End If 

Application.ActiveDocument.Save 

If SSave = True Then 
    MsgBox "True" 
End If 

End Sub 

는 클래스 모듈은 :

Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean) 

    If Application.ActiveDocument.SSave = False Then 
     MsgBox "False" 
    End If 
End Sub 

클래스 모듈 등록 완료 적절한 나는 그 코드를 붙여 넣지 않을거야.

표시되는 결과는 참, 거짓, 이론적으로는 참, 참이어야합니다.

+1

내가 제대로 할 수 있는지 확실하지 않습니다 ... 실제 목표는 무엇입니까? 저장을 허용하거나 허용하지 않겠습니까? 프로세스를 제어합니까? 또는 단순히 객체에서 클래스로 값을 전달 ...당신은 약간의 아이디어가있는 것 같지만 질문은 명확하지 않습니다. 당신은 귀하의 요구를 더 잘 이해할 수있는 몇 가지 코드를 추가 할 수 있습니다 ... –

+0

사용자가 표준 저장 및 SaveAs 메뉴 항목을 사용하지 않고 하위 옵션을 사용하여 문서를 저장할 때이를 감지하고 코드 스 니펫을 실행하고 싶습니다. – Steve

+0

클래스에 'property let \ get'을 추가로 만들 수 있으며이 속성을 사용하면 클래스에 값을 전달할 수 있습니다. 아니면 당신이 전달하는 그 가치를 취할 수있는 클래스에 추가'public 변수'를 추가하십시오 –

답변

1

나는 당신의 논리에서 여전히 뭔가를 놓친다. 의견에서 나는 이런 식으로 갈 수있는 다른 논리를 생각했다. 이 코드는 사용자가 제시 한 코드와 코드가 혼합되어 있습니다.

클래스 모듈

Public WithEvents App As Word.Application 

Public pSSave As Boolean 'your class variable/property 

Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean) 
If pSSave = False Then 
    MsgBox pSSave 
Else 
    MsgBox pSSave 
End If 
End Sub 

으로 Module1이

'class initialization 
Public wrdAPP As New myClass 
Sub set_References() 
    Set wrdAPP.App = Application 
End Sub 

의 ThisDocument 모듈이

Private Sub Document_Open() 
'to initialize public variable when open 
    Call Module1.set_References 
End Sub 

Sub FileSave() 

wrdAPP.pSSave = True 

Application.ActiveDocument.Save 

If wrdAPP.pSSave = True Then 
    MsgBox "True" 
End If 

End Sub 

나도 몰라하는 너는 FileSave sub를 달릴거야. 그러나 실행 된 후에는 클래스 속성에 값을 전달하여 이벤트를 확인할 수 있습니다. 어쨌든 도움이되기를 바랍니다.

+0

작품, 고마워요! – Steve

+0

당신은 환영합니다 :) –