Back to jkp-ads.com |
Ron de Bruin
|
Ron de Bruin decided to remove all Windows Excel content from his website for personal reasons. If you want to know why, head over to rondebruin.nl.
Luckily, Ron was kind enough to allow me to publish all of his Excel content here.
Most of these pages are slightly outdated and may contain links that don 't work. Please inform me if you find such an error and I'll try to fix it.
Kind regards
Jan Karel Pieterse
Copy the code in a Standard module of your workbook, if you just
started with VBA see this page.
Where do I paste
the code that I find on the internet
On this page you find some basic VBA code to Import and Export VBA code
in Excel for Windows.
You can use it to import modules/userforms to other
Excel files or to update the code in other Excel files.
Note:
This example not Export/Import the code in sheet modules and from the
Thisworkbook module.
Tip: Check out also the two
links in the "More Information" part of this page.
The Export macro
will export every module(.bas),class module(.cls)
and userfom(.frm, .frx) from the ActiveWorkbook to a folder
named "VBAProjectFiles" in your Documents
folder.
Note: never rename these files manual because
the name of the file is not the module name that you
see after you
import the code into another Excel workbook.
If you open for example
a module file (.bas) in Notepad you see this line of
metadata at the top
Attribute VB_Name =
"TheNameYouWant"
This is the name that the Module have when you
import it into another workbook.
If you edit the name of a module in
the properties of the module it will update this line nicely. So if you see
names that are not correct after your Export check out this metadata line
first. If this line is missing it will use the default Module1, Module2,
.......
1: Open the file with the code from this page
2: Open/Activate the
file with the modules you want to export
3: Run the ExportModules
macro
4: Note: If you look in the
VBAProjectFiles folder you see the files now
5: Open/Activate
the workbook where you want to add the modules to
6: Run the
ImportModules macro (It delete all existing modules/userforms from
this Workbook first)
7: Done
Copy every macro and function below into a Standard module of a new workbook and save this Import-Export file as xls or xlsm.
In the VBE Editor set a reference to "Microsoft Visual Basic For Applications Extensibility 5.3" and to "Microsoft Scripting Runtime" and then save the file.
You also need to enable programmatic access to the VBA Project in Excel. In Excel 2003 and earlier, go the Tools>Macros>Security(in Excel), click on the Trusted Publishers tab and check the Trust access to the Visual Basic Project setting. In Excel 2007-2013, click the Developer tab and then click the Macro Security item. In that dialog, choose Macro Settings and check the Trust access to the VBA project object model. You can also try the shortcut ALT tms to go to this dialog.
Public Sub ExportModules() Dim bExport As Boolean Dim wkbSource As Excel.Workbook Dim szSourceWorkbook As String Dim szExportPath As String Dim szFileName As String Dim cmpComponent As VBIDE.VBComponent ''' The code modules will be exported in a folder named. ''' VBAProjectFiles in the Documents folder. ''' The code below create this folder if it not exist ''' or delete all files in the folder if it exist. If FolderWithVBAProjectFiles = "Error" Then MsgBox "Export Folder not exist" Exit Sub End If On Error Resume Next Kill FolderWithVBAProjectFiles & "\*.*" On Error GoTo 0 ''' NOTE: This workbook must be open in Excel. szSourceWorkbook = ActiveWorkbook.Name Set wkbSource = Application.Workbooks(szSourceWorkbook) If wkbSource.VBProject.Protection = 1 Then MsgBox "The VBA in this workbook is protected," & _ "not possible to export the code" Exit Sub End If szExportPath = FolderWithVBAProjectFiles & "\" For Each cmpComponent In wkbSource.VBProject.VBComponents bExport = True szFileName = cmpComponent.Name ''' Concatenate the correct filename for export. Select Case cmpComponent.Type Case vbext_ct_ClassModule szFileName = szFileName & ".cls" Case vbext_ct_MSForm szFileName = szFileName & ".frm" Case vbext_ct_StdModule szFileName = szFileName & ".bas" Case vbext_ct_Document ''' This is a worksheet or workbook object. ''' Don't try to export. bExport = False End Select If bExport Then ''' Export the component to a text file. cmpComponent.Export szExportPath & szFileName ''' remove it from the project if you want '''wkbSource.VBProject.VBComponents.Remove cmpComponent End If Next cmpComponent MsgBox "Export is ready" End Sub Public Sub ImportModules() Dim wkbTarget As Excel.Workbook Dim objFSO As Scripting.FileSystemObject Dim objFile As Scripting.File Dim szTargetWorkbook As String Dim szImportPath As String Dim szFileName As String Dim cmpComponents As VBIDE.VBComponents If ActiveWorkbook.Name = ThisWorkbook.Name Then MsgBox "Select another destination workbook" & _ "Not possible to import in this workbook " Exit Sub End If 'Get the path to the folder with modules If FolderWithVBAProjectFiles = "Error" Then MsgBox "Import Folder not exist" Exit Sub End If ''' NOTE: This workbook must be open in Excel. szTargetWorkbook = ActiveWorkbook.Name Set wkbTarget = Application.Workbooks(szTargetWorkbook) If wkbTarget.VBProject.Protection = 1 Then MsgBox "The VBA in this workbook is protected," & _ "not possible to Import the code" Exit Sub End If ''' NOTE: Path where the code modules are located. szImportPath = FolderWithVBAProjectFiles & "\" Set objFSO = New Scripting.FileSystemObject If objFSO.GetFolder(szImportPath).Files.Count = 0 Then MsgBox "There are no files to import" Exit Sub End If 'Delete all modules/Userforms from the ActiveWorkbook Call DeleteVBAModulesAndUserForms Set cmpComponents = wkbTarget.VBProject.VBComponents ''' Import all the code modules in the specified path ''' to the ActiveWorkbook. For Each objFile In objFSO.GetFolder(szImportPath).Files If (objFSO.GetExtensionName(objFile.Name) = "cls") Or _ (objFSO.GetExtensionName(objFile.Name) = "frm") Or _ (objFSO.GetExtensionName(objFile.Name) = "bas") Then cmpComponents.Import objFile.Path End If Next objFile MsgBox "Import is ready" End Sub Function FolderWithVBAProjectFiles() As String Dim WshShell As Object Dim FSO As Object Dim SpecialPath As String Set WshShell = CreateObject("WScript.Shell") Set FSO = CreateObject("scripting.filesystemobject") SpecialPath = WshShell.SpecialFolders("MyDocuments") If Right(SpecialPath, 1) <> "\" Then SpecialPath = SpecialPath & "\" End If If FSO.FolderExists(SpecialPath & "VBAProjectFiles") = False Then On Error Resume Next MkDir SpecialPath & "VBAProjectFiles" On Error GoTo 0 End If If FSO.FolderExists(SpecialPath & "VBAProjectFiles") = True Then FolderWithVBAProjectFiles = SpecialPath & "VBAProjectFiles" Else FolderWithVBAProjectFiles = "Error" End If End Function Function DeleteVBAModulesAndUserForms() Dim VBProj As VBIDE.VBProject Dim VBComp As VBIDE.VBComponent Set VBProj = ActiveWorkbook.VBProject For Each VBComp In VBProj.VBComponents If VBComp.Type = vbext_ct_Document Then 'Thisworkbook or worksheet module 'We do nothing Else VBProj.VBComponents.Remove VBComp End If Next VBComp End Function
Check out also Chip Pearson's site about the VBE Editor
http://www.cpearson.com/excel/vbe.aspx
Rob Bovey's CodeCleaner
http://www.appspro.com/Utilities/CodeCleaner.htm
Note: also options
to import and Export code modules in this add-in