2012-03-08 18 views
7

Tôi có một ứng dụng VB.Net/C# rằng cách lập trình:Làm thế nào bạn có thể nói lập trình nếu một Macro Word được ký kết từ VB.Net/C#

  1. Tạo một tài liệu RTF
  2. mở nó lên trong Microsoft lời
  3. Chạy một macro Word mà tồn tại trong từ Template sử dụng mã như thế này:

Code:

Protected mobjWordApp As Word.Application = Nothing 
' 
' lots more code snipped for clarity 
' 
With mobjWordApp.Dialogs.Item(Word.WdWordDialog.wdDialogToolsMacro) 
    .Name = MacroName 
    .Run = True 
    .Execute() 
End With 

Điều này đã làm việc vui vẻ trong nhiều năm.

Tôi hiện có yêu cầu mới; Ứng dụng của tôi là bắt buộc để chỉ chạy SIGNED Word Macros.

Đây là đủ dễ dàng để làm trong giao diện người dùng Word, như sau:

File > Options > Trust center > Macro Settings 
Select "Disable all macros except digitally signed macros" 

Trust Center

Một khi điều này được thiết lập, nếu người chạy Word sẽ hiển thị hộp thoại Macros, bất kỳ unsigned (hoặc macro đã ký nhưng không đáng tin cậy) không được liệt kê. Đây là tất cả như tôi mong đợi.

Tuy nhiên, mã VB.Net của tôi, đang mở ứng dụng Word có thể bỏ qua điều này. Khi tôi chạy mã này nó sẽ chạy một macro unsigned:

With mobjWordApp.Dialogs.Item(Word.WdWordDialog.wdDialogToolsMacro) 
    .Name = MacroName 
    .Run = True 
    .Execute() 
End With 

Những gì tôi cần biết là:

Có cách nào cho mã của tôi để xác định nếu một Macro được ký kết (và đáng tin cậy) trước khi tôi chạy nó?

+0

gì phiên bản của từ doc? doc hoặc docx? –

+0

G'day Micah, chúng tôi đang chạy Word 2007 (32 bit) với các tệp .dotm và .doc –

Trả lời

4
Dim ap As New Application() 
Dim doc As Document = ap.Documents.Open("C:\Doc1.rtf", [ReadOnly] := False, Visible :=  False) 
doc.Activate() 
'returns a boolean on if the VBA is signed 
doc.VBASigned 

MSDN Link

Các vấn đề liên quan