Solved

Remove Office macro by VC++

Posted on 2016-08-30
10
104 Views
Last Modified: 2016-08-31
Hello Experts,

I want to remove macro in MS Office(Excel,Word,PowerPoint) file by VC++.
Do I need to work with C#  with .NET ?

I want to delete all visible and invisible macros from Office 2003, 2007 files.

Can someone suggest how to code removing macro ?

Regards,
Nobuo Miwa
0
Comment
Question by:NobMiwa
  • 3
  • 3
  • 3
  • +1
10 Comments
 
LVL 18

Expert Comment

by:xtermie
ID: 41777660
Microsoft has already done this and is described here for Word files (DOCM extension).
Take a look, it should work just fine and then you can tweak for other file extension.
https://msdn.microsoft.com/en-us/library/office/gg188063.aspx
0
 
LVL 11

Expert Comment

by:Jamie Garroch
ID: 41777681
You could save the macro-enabled file in the corresponding non-macro file format and the VBA project will be removed automatically.

For example:

Excel : .xlsm -> .xlsx
Word : .docm -> .docx
PowerPoint : .pptm -> .pptx
0
 
LVL 18

Expert Comment

by:xtermie
ID: 41777688
This macro will do this for Word
Sub SaveAsDocx()
Dim file
Dim path As String
path = "C:\Test\"           'your folder here

file = Dir(path & "*.docm")
Do While file <> ""
Documents.Open FileName:=path & file
ActiveDocument.SaveAs2 FileName:=path & file, FileFormat:=wdFormatXMLDocument, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False, CompatibilityMode:=15
ActiveDocument.Close
file = Dir()
Loop
End Sub

Open in new window

0
Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 

Author Comment

by:NobMiwa
ID: 41777707
Thank you guys,

Are those approach able to remove macro from Office 2003 ?

Regards,
Nobuo Miwa
0
 
LVL 11

Expert Comment

by:Jamie Garroch
ID: 41777767
This will save a macro-enabled PowerPoint presentation in the .pptm file format without macros to the same folder without macros using the .pptx file format:

Sub SaveWithoutMacros()
  With ActivePresentation
    MsgBox "Saving " & Chr(34) & .Name & Chr(34) & " as : " & vbCrLf _
      & Replace(.Name, ".pptm", ".pptx") & " here : " & vbCrLf _
      & .Path
    .SaveAs FileName:="NoMacros.pptx", FileFormat:=ppSaveAsOpenXMLPresentation
  End With
End Sub

Open in new window

0
 
LVL 11

Expert Comment

by:Jamie Garroch
ID: 41777782
Office 2003 is pre-OpenXML formats and used the Office proprietary format which did not have separate file formats for macro-enabled presentations. Do you need to keep the 2003 format or can you save it in the newer XML format? Here is an example of a programmatic approach to remove code modules one at a time for Excel:

Option Explicit 
 
Sub DeleteVBA() 
     
    ' Trust Access To Visual Basic Project must be enabled:
    ' Tools | Macro | Security | Trusted Sources
     
    Dim lComp As Long 
    Dim lLine As Long 
     
    On Error Resume Next 
    With ActiveWorkbook.VBProject 
        For lComp = .VBComponents.Count To 1 Step -1 
            .VBComponents.Remove .VBComponents(lComp) 
        Next
        For lLine = .VBComponents.Count To 1 Step -1 
            .VBComponents(lLine).CodeModule.DeleteLines _ 
            1, .VBComponents(lLine).CodeModule.CountOfLines 
        Next
    End With 
    On Error GoTo 0 
     
End Sub

Open in new window

0
 
LVL 76

Accepted Solution

by:
GrahamSkan earned 500 total points
ID: 41777821
You could save pre-2007 files as macro-free .docx format and then open and save them in the older format.
0
 
LVL 18

Expert Comment

by:xtermie
ID: 41777953
Jamie's code should work for the other apps :)
0
 

Author Comment

by:NobMiwa
ID: 41778946
Hello guys,

I want code that can run as standalone app , and does not run as macro(VBA).

> You could save pre-2007 files as macro-free .docx format and then open
> and save them in the older format.

I will try this from C# and post result on this thread.
0
 

Author Closing Comment

by:NobMiwa
ID: 41779163
Thanks GrahamSkan !

It works fine for me and easy to implement with C#.
0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

My experience with Windows 10 over a one year period and suggestions for smooth operation
When you see single cell contains number and text, and you have to get any date out of it seems like cracking our heads.
In a previous video Micro Tutorial here at Experts Exchange (http://www.experts-exchange.com/videos/1358/How-to-get-a-free-trial-of-Office-365-with-the-Office-2016-desktop-applications.html), I explained how to get a free, one-month trial of Office …
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

789 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question