Excel宏相关疑问及VBA二进制提取技术求助(含脚本问题)
Hey there! Since you're just getting started with Excel macros, let's walk through your questions one by one:
1. Will an XLS file automatically convert to XLSM when adding macros and buttons?
Short answer: No, it won't happen automatically.
When you create a macro and bind it to a button in a .xls file, Excel will throw a warning telling you that the .xls format doesn't support macros. If you don't manually save the file in a macro-enabled format, your macro will be lost when you close and reopen the file.
To properly save your macro, go to File > Save As, then select Excel Macro-Enabled Workbook (*.xlsm) (or .xlsb if you prefer a binary format) from the file type dropdown. That's the only way to ensure your macro is stored with the workbook.
2. Fixing the "py..." output issue when using olevba.py/vba_extract.py
That weird "py..." output usually means there's an issue with how you're running the scripts, or your environment isn't set up correctly. Let's troubleshoot this:
First, use the correct tool setup
olevba isn't a standalone script you need to download separately—it's part of the oletools package. Start by installing it properly via pip:
pip install oletools
Once installed, you don't need to mess with olevba.py directly. Just run the olevba command in your terminal/command prompt.
Run the command the right way
Navigate to the folder where your .xlsm file is saved, then run:
olevba your_workbook.xlsm
This should spit out all the VBA code stored in the file, including your macro's source.
If that still doesn't work, try these checks:
- Verify your file actually has macros: Open the
.xlsmfile, pressAlt+F11to open the VBA Editor, and confirm your macro code is there. If it's missing, you probably didn't save the file as.xlsmcorrectly earlier. - Check your Python version: oletools requires Python 3.6 or newer. Run
python --versionto confirm you're on a supported version. - Alternative: Use xlwings to extract code
If oletools is giving you grief, xlwings is a great Python library for interacting with Excel, and it can pull VBA code easily. Here's how:
- Install xlwings:
pip install xlwings
- Run this script to extract your macro code:
import xlwings as xw # Open the Excel file in the background (no visible window) with xw.App(visible=False) as app: workbook = xw.Book("your_workbook.xlsm") # Loop through all VBA modules for module in workbook.api.VBProject.VBComponents: # Target standard modules (Type 1) and class modules (Type 2) if module.Type in (1, 2): print(f"--- Module: {module.Name} ---") # Print all lines of code in the module print(module.CodeModule.Lines(1, module.CodeModule.CountOfLines)) workbook.close()
This will print out all your VBA code directly, which you can then use in your external Python program.
内容的提问来源于stack exchange,提问作者Shani Smadja

