Manage VBA codes of Excel Macro-Enabled workbook
Add a VBA Module in JavaScript via C++
The following sample code creates a new workbook and adds a new VBA Module and Macro Code and saves the output in the XLSM format. Once you open the output XLSM file in Microsoft Excel and click the Developer > Visual Basic menu commands, you will see a module named “TestModule” and inside it, you will see the following macro code.
Sub ShowMessage() {
MsgBox "Welcome to Aspose!"
}
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example - Add VBA Module</title>
</head>
<body>
<h1>Add VBA Module Example</h1>
<input type="file" id="fileInput" accept=".xls,.xlsx,.xlsm,.csv" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
// Create new workbook
const workbook = new Workbook();
// Access first worksheet
const worksheet = workbook.worksheets.get(0);
// Add VBA Module
const idx = workbook.vbaProject.modules.add(worksheet);
// Access the VBA Module, set its name and codes
const module = workbook.vbaProject.modules.get(idx);
module.name = "TestModule";
module.codes = "Sub ShowMessage()\r\n" +
" MsgBox \"Welcome to Aspose!\"\r\n" +
"End Sub";
// Save the workbook as XLSM and prepare download
const outputData = workbook.save(SaveFormat.Xlsm);
const blob = new Blob([outputData], { type: "application/vnd.ms-excel.sheet.macroEnabled.12" });
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'output_out.xlsm';
downloadLink.style.display = 'block';
downloadLink.textContent = 'Download Excel File';
document.getElementById('result').innerHTML = '<p style="color: green;">VBA module added successfully! Click the download link to get the modified file.</p>';
});
</script>
</html>
Modify VBA or Macro in JavaScript via C++
You can modify VBA or Macro Code using Aspose.Cells for JavaScript via C++. Aspose.Cells has added the following module and classes to read and modify the VBA project in the Excel file.
- Aspose.Cells.Vba
- VbaProject
- VbaModuleCollection
- VbaModule
This article will show you how to change the VBA or Macro Code inside the source Excel file using Aspose.Cells.
The following sample code loads the source Excel file which has the following VBA or Macro code inside it
Sub Button1_Click() {
MsgBox "This is test message."
}
After the execution of Aspose.Cells sample code, the VBA or Macro code will be modified like this
Sub Button1_Click() {
MsgBox "This is Aspose.Cells message."
}
You can download the source Excel file and the output Excel file from the given links.
<!DOCTYPE html>
<html>
<head>
<title>Change VBA Module Code Example</title>
</head>
<body>
<h1>Change VBA Module Code Example</h1>
<input type="file" id="fileInput" accept=".xlsm,.xls,.xlsx" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
const resultDiv = document.getElementById('result');
if (!fileInput.files.length) {
resultDiv.innerHTML = '<p style="color: red;">Please select an Excel file (.xlsm).</p>';
return;
}
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();
const workbook = new Workbook(new Uint8Array(arrayBuffer));
// Access VBA project modules
const modules = workbook.vbaProject.modules;
const moduleCount = modules.count;
for (let i = 0; i < moduleCount; i++) {
const module = modules.get(i);
let code = module.codes;
if (code && code.includes("This is test message.")) {
code = code.replace("This is test message.", "This is Aspose.Cells message.");
module.codes = code;
}
}
const outputData = workbook.save(SaveFormat.Xlsm);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'output_out.xlsm';
downloadLink.style.display = 'block';
downloadLink.textContent = 'Download Modified Excel File';
resultDiv.innerHTML = '<p style="color: green;">VBA module code updated successfully! Click the download link to get the modified file.</p>';
});
</script>
</html>
Advance topics
- Add a library reference to VBA project in workbook
- Assign Macro to Form Control
- Check if Digital Signature of VBA Code is Valid
- Check if VBA Code is Signed
- Check if VBA project in a Workbook is Signed
- Check if VBA Project is Protected and Locked for Viewing
- Copy VBA Macro UserForm DesignerStorage from Template to Target Workbook
- Digitally Sign a VBA Code Project with Certificate
- Export VBA Certificate to File or Stream
- Filter VBA Project while loading a workbook
- Find out if VBA Project is Protected
- Password Protect the VBA Project of Excel Workbook