Solved

Remove Office macro by VC++

Posted on 2016-08-30
10
97 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 10

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
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 

Author Comment

by:NobMiwa
ID: 41777707
Thank you guys,

Are those approach able to remove macro from Office 2003 ?

Regards,
Nobuo Miwa
0
 
LVL 10

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 10

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

Optimizing Cloud Backup for Low Bandwidth

With cloud storage prices going down a growing number of SMBs start to use it for backup storage. Unfortunately, business data volume rarely fits the average Internet speed. This article provides an overview of main Internet speed challenges and reveals backup best practices.

Question has a verified solution.

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

In this article we discuss how to recover the missing Outlook 2011 for Mac data like Emails and Contacts manually.
When you see single cell contains number and text, and you have to get any date out of it seems like cracking our heads.
This Micro Tutorial will demonstrate in Microsoft Excel how to add style and sexy appeal to horizontal bar charts.
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

773 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