- 
Export VBA Modules for Version Control updated September 2024Add a Module in your VBA Project. Name it “Exports” and paste the following code into the module in its entirety. When your project is ready for export (and subsequent version control), click on the “Macros” button in the Developer ribbon, select “ExportVBAModules” and click “Run.” 
 Option Explicit‘ Define a constant for the export location 
 Const EXPORT_PATH As String = “F:\VBAProjects\”Sub ExportVBAModules() 
 Dim VBProj As VBIDE.VBProject
 Dim VBComp As VBIDE.VBComponent
 Dim objFSO As Object
 Dim objFile As Object
 Dim strPath As String
 Dim strFile As String
 Dim LineNum As Long
 Dim modCode As String
 Dim wbName As String‘ Get the name of the workbook without extension 
 wbName = Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, “.”) – 1)‘ Create a new folder in the specified location with workbook name and timestamp 
 strPath = EXPORT_PATH & wbName & “_VBAExport_” & Format(Now, “yyyymmdd_hhmmss”)‘ Check if the EXPORT_PATH exists, if not, create it 
 Set objFSO = CreateObject(“Scripting.FileSystemObject”)
 If Not objFSO.FolderExists(EXPORT_PATH) Then
 objFSO.CreateFolder EXPORT_PATH
 End If‘ Create the export folder 
 MkDir strPath‘ Reference Microsoft Visual Basic for Applications Extensibility 5.3 library 
 Set VBProj = ThisWorkbook.VBProjectFor Each VBComp In VBProj.VBComponents 
 Select Case VBComp.Type
 Case vbext_ct_ClassModule
 strFile = strPath & “\” & VBComp.Name & “.cls”
 Case vbext_ct_MSForm
 strFile = strPath & “\” & VBComp.Name & “.frm”
 Case vbext_ct_StdModule
 strFile = strPath & “\” & VBComp.Name & “.bas”
 Case vbext_ct_Document
 ‘ This is a worksheet or workbook object.
 ‘ Don’t export these unless you want to.
 strFile = strPath & “\” & VBComp.Name & “.cls”
 Case Else
 strFile = strPath & “\” & VBComp.Name & “.txt”
 End SelectIf VBComp.CodeModule.CountOfLines > 0 Then 
 modCode = VBComp.CodeModule.Lines(1, VBComp.CodeModule.CountOfLines)
 Set objFile = objFSO.CreateTextFile(strFile)
 objFile.Write modCode
 objFile.Close
 End If
 Next VBCompMsgBox “Modules exported to ” & strPath 
 End Sub
- 
Update Access VBA Saved Imports Exports: A Step-by-Step Guide Updating Access VBA saved imports exports is essential when dealing with external data sources. This step-by-step guide will show you how to update Access VBA saved imports exports by dynamically changing the file path within your import/export specifications. In this article, we’ll walk through a powerful VBA script that allows you to update Access VBA saved imports exports easily. This technique is also applicable to Microsoft Excel, making it a versatile solution for managing external data sources across Microsoft Office applications. PrerequisitesBefore using the script, ensure you have the necessary references set up in your VBA project: - Open the Visual Basic Editor (VBE) in Access (Alt+F11 or Database Tools tab > Visual Basic).
- Go to Tools > References.
- Check “Microsoft XML, v6.0” in the References dialog box.
- Click OK to close the dialog box.
 Why Update Access VBA Saved Imports Exports?- Flexibility: Easily update file paths when external data source locations change.
- Time-saving: Avoid recreating import export specifications from scratch.
- Automation:Incorporate the script into your VBA modules for automated updates.
- Compatibility: Works seamlessly with both Access and Excel.
- Efficiency: Edit XML specifications directly, bypassing Access UI limitations.
 The VBA Script to Update Access VBA Saved Imports ExportsHere’s the UpdateImportSpecPathXMLscript to update Access VBA saved imports exports:Public Sub UpdateImportSpecPathXML(ByVal strSpecName As String, ByVal strNewPath As String) 
 
 Dim xmlString As String
 Dim xmlDoc As Object
 Dim xmlNode As Object
 Dim newPath As String
 Dim projectPath As String
 
 ' Get the project path
 'projectPath = CurrentProject.Path
 
 ' Define the new path
 'newPath = projectPath & "\NWEDAILY.txt"
 
 ' Get the XML string representation of the import/export specification
 xmlString = CurrentProject.ImportExportSpecifications(strSpecName).XML
 
 ' Create a new XML document object
 Set xmlDoc = CreateObject("MSXML2.DOMDocument")
 
 ' Load the XML string
 xmlDoc.LoadXML xmlString
 
 ' Set the namespace for the document
 xmlDoc.SetProperty "SelectionNamespaces", "xmlns:ns='urn:www.microsoft.com/office/access/imexspec'"
 
 ' Select the ImportExportSpecification node
 Set xmlNode = xmlDoc.SelectSingleNode("//ns:ImportExportSpecification")
 
 ' Update the Path attribute
 xmlNode.Attributes.getNamedItem("Path").Text = strNewPath
 
 ' Save the updated XML back to the specification
 CurrentProject.ImportExportSpecifications(strSpecName).XML = xmlDoc.XML
 
 'MsgBox "Path attribute updated successfully."
 
 End SubHow the Script Works- Retrieves the XML string of the specified import/export specification.
- Creates a new XML document object and loads the XML string.
- Sets the namespace for proper XML manipulation.
- Selects the ImportExportSpecificationnode.
- Updates the Pathattribute with the new file path.
- Saves the updated XML back to the import/export specification.
 To update your saved imports exports, simply call the script with the specification name and new file path. Step-by-Step Guide to Update Access VBA Saved Imports Exports- Open your Access database and press Alt+F11 to open the Visual Basic Editor.
- In the VBE, go to Tools > References and check “Microsoft XML, v6.0”.
- Create a new module and paste the UpdateImportSpecPathXMLscript.
- Call the script with the specification name and new file path to update your Access VBA saved imports exports.
 By following these steps, you can easily update Access VBA saved imports exports and streamline your data management tasks. ConclusionUpdating Access VBA saved imports exports is a powerful technique for managing external data sources efficiently. By using the provided script and following the step-by-step guide, you can dynamically update file paths within your saved specifications, saving time and effort. Implement this solution in your Access projects and simplify your data management workflows. If you have any questions or suggestions, please leave a comment below. Happy coding! 
- 
ReturnNameFunction ReturnName(ByVal num As Integer) As String ReturnName = Split(Cells(, num).Address, "$")(1) End Function 
- 
DeleteInitialColumnsFromWorksheetNote: This function depends on ReturnName Sub DeleteInitialColumnsFromWorksheet( _ ws As Worksheet, _ NumberOfColumns As Integer _ ) With ws .Columns( _ ReturnName( _ 1 _ ) & _ ":" & _ ReturnName( _ NumberOfColumns _ ) _ ).Delete _ Shift:=xlToLeft End With End Sub
- 
DeleteBottomRowsFromWorksheetNote: This method depends on GetLastUsedRowNumberInWorksheet Sub DeleteBottomRowsFromWorksheet( _ ws As Worksheet _ ) Dim _ strStartingEmptyRow As String, _ rngStartingRow As Range, _ rngEmptyRows As Range, _ lngLastRow As Long lngLastRow = _ GetLastUsedRowNumberInWorksheet( _ ws _ ) If lngLastRow = _ -1 Then Exit Sub End If strStartingEmptyRow = _ CStr( _ lngLastRow + 1 _ ) Set rngStartingRow = _ ws.Rows( _ strStartingEmptyRow & _ ":" & _ strStartingEmptyRow _ ) Set rngEmptyRows = _ Range( _ rngStartingRow, _ rngStartingRow.End( _ xlDown _ ) _ ) rngEmptyRows.Delete _ shift:=xlUp End Sub
- 
GetLastUsedColumnNumberInWorksheetFunction GetLastUsedColumnNumberInWorksheet( _ ws As Worksheet _ ) As Long Dim _ rng As Range, _ rngResults As Range Set rng = _ ws.Cells Set rngResults = _ rng.Find( _ what:="*", _ After:=rng.Cells(1), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious, _ MatchCase:=False _ ) If _ rngResults Is Nothing _ Then GetLastUsedColumnNumberInWorksheet = _ -1 Else GetLastUsedColumnNumberInWorksheet = _ rngResults.Column End If Exit Function ErrorHandler: GetLastUsedColumnNumberInWorksheet = _ -1 End Function
- 
GetLastUsedRowNumberInWorksheetFunction GetLastUsedRowNumberInWorksheet( _ ws As Worksheet _ ) As Long Dim _ rng As Range, _ rngResults As Range Set rng = _ ws.Cells Set rngResults = _ rng.Find( _ what:="*", _ After:=rng.Cells(1), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False _ ) If _ rngResults Is Nothing _ Then GetLastUsedRowNumberInWorksheet = _ -1 Else GetLastUsedRowNumberInWorksheet = _ rngResults.Row End If Exit Function ErrorHandler: GetLastUsedRowNumberInWorksheet = _ -1 End Function
- 
DeleteAllConnectionsFromWorkbookOfTypePublic Function DeleteAllConnectionsFromWorkbookOfType( _ wb As Workbook, _ xlconnType As XlConnectionType _ ) Dim _ wbcn As WorkbookConnection For Each wbcn In wb.Connections If wbcn.Type = xlconnType Then wbcn.Delete End If Next wbcn End Function
- 
DeleteAllSlicersFromWorkbookPublic Function DeleteAllSlicersFromWorkbook( _ wb As Workbook _ ) Dim _ ws As Worksheet, _ shp As Shape For Each ws In wb.Sheets For Each shp In ws.Shapes If shp.Type = msoSlicer Then shp.Delete Next shp Next ws End Function
- 
GetFileExtensionPublic Function GetFileExtension( _ sFullFileNameWithPath As String _ ) As String Dim fs As Object Set fs = CreateObject("Scripting.FileSystemObject") GetFileExtension = _ fs.GetExtensionName( _ sFullFileNameWithPath _ ) Set fs = Nothing End Function