How to add excel 2010 macro programmatically

给你一囗甜甜゛ 提交于 2019-12-01 02:58:43

问题


Is there any method to add macro to Excel file programmatically ?
I have too many Excel files I want to add a macro to them. Adding manually (by hand) seems impossible. I need to create a tool to do this.


回答1:


Yes, you can do this programatically, you can access the VB Integrated Development Environment through code. The following website are excellent for learning about the VBIDE, I've used them to put together this code. If you run WorkbookModuleImporttwo open dialog boxes will pop up, the first asking for workbooks to import the modules into, the second to select the modules for importing.

Sub WorkbookModuleImport()
    Dim ii As Integer, vFileNames As Variant, vModules As Variant

    'We'll use the Application.GetOpenFilename to get a list of all the excel     workbooks we want to import into
    vFileNames = Application.GetOpenFilename(",*.xls;*.xlsx;*.xlsm", , "Select Workbooks to Import Modules To", , True)
    'If the result is not an array it means the cancel button has been pressed
    If Not IsArray(vFileNames) Then Exit Sub

    'Use the same method to get all the modules/classes/forms to input
    vModules = Application.GetOpenFilename(",*.cls, *.bas, *.frm", , "Select Modules/Forms/Class Modules to Import", , True)
    If Not IsArray(vModules) Then Exit Sub

    'Now loop through all the workbooks to import the modules
    For ii = LBound(vFileNames) To UBound(vFileNames)
        Call ImportModules(VBA.CStr(vFileNames(ii)), vModules)
    Next ii

End Sub



Public Sub ImportModules(sWorkbookName As String, vModules As Variant)
    Dim cmpComponents As VBIDE.VBComponents, ii As Integer
    Dim wkbTarget As Excel.Workbook

    'We need to open the workbook in order to be able to import the code module
     Set wkbTarget = Workbooks.Open(sWorkbookName)

    'If the project is protected with a password we can't import so just set tell us in the immediate window
    If wkbTarget.VBProject.Protection = 1 Then
        'Give a message
        Debug.Print wkbTarget.Name & " has a protected project, cannot import module"
        GoTo Cancelline
    End If

    'This is where we set the reference to the components of the Visual Basic project
    Set cmpComponents = wkbTarget.VBProject.VBComponents

   'Loop through all the modules to import
    For ii = LBound(vModules) To UBound(vModules)
        cmpComponents.Import vModules(ii)
    Next ii


Cancelline:
   'If it's in Excel 2007+ format but doesn't already have macros, we'll have to save it as a macro workbook
   If wkbTarget.FileFormat = xlOpenXMLWorkbook Then
       wkbTarget.SaveAs wkbTarget.Name, xlOpenXMLWorkbookMacroEnabled
       wkbTarget.Close SaveChanges:=False
   Else
       'Otherwise, just save the workbook and close it
        wkbTarget.Close SaveChanges:=True
   End If

   'I don't trust excel, so set the workbook object to nothing
   Set wkbTarget = Nothing
End Sub

These webpages are great references: http://www.cpearson.com/excel/vbe.aspx and http://www.rondebruin.nl/vbaimportexport.htm. I used Ron's as a starting point.



来源:https://stackoverflow.com/questions/14493473/how-to-add-excel-2010-macro-programmatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!