Hello guys, I have a python code that reads 3 arguments (scalars) and a text files and then returns me a vector of double. I want to write a macro in vba to call this python code and write the results in one of the same excel sheet. I wanted to know what was the easiest way to do it, here are some stuffs that I found: - call the shell() function in vba but it doesn't seem so easy to get the return value. - register the python code as a COM object and call it from vba--> i don't know how to do that so if you have some examples it would be more than welcome - create a custom tool in a custom toolbox, in vba create a geoprocessing object and then addtoolbox and then we can use the custom tool directly via the geoprocessing object but this is something as well that I don't know how to do.. Any tips?
                +1 
                A: 
                
                
              Do you have to call the Python code as a macro? You could use COM hooks within the Python script to direct Excel and avoid having to use another language:
import win32com.client
# Start Excel
xlApp = win32com.client.Dispatch( "Excel.Application" )
workbook = xlApp.Workbooks.Open( <some-file> )
sheet = workbook.Sheets( <some-sheet> )
sheet.Activate( )
# Get values
spam = sheet.Cells( 1, 1 ).Value
# Process values
...
# Write values
sheet.Cells( ..., ... ).Value = <result>
# Goodbye Excel
workbook.Save( )
workbook.Close( )
xlApp.Quit( )
                  katrielalex
                   2010-08-25 15:47:04
                
              Hi Katrielalex, well I need to be able to run this code from excel just clicking a button to which I would assign a macro. This allows me to call excel from python but I want to do the opposite.
                  
                   2010-08-25 17:17:00
                @user: ok, never mind then =).
                  katrielalex
                   2010-08-26 08:38:31
                
                +2 
                A: 
                
                
              
            Follow these steps carefully
- Go to Activestate and get ActivePython 2.5.7 MSI installer.
 I had DLL hell problems with 2.6.x
- Install in your Windows machine
- once install is complete open Command Prompt and go to - C:\Python25\lib\site-packages\win32comext\axscript\client 
- execute - \> python pyscript.pyyou should see message Registered: Python
- Go to ms office excel and open worksheet 
- Go to Tools > Macros > Visual Basic Editor
- Add a reference to the Microsoft Script control  
- Add a new User Form. In the UserForm add a CommandButton
- Switch to the code editor and Insert the following code - Dim WithEvents PyScript As MSScriptControl.ScriptControl - Private Sub CommandButton1_Click() If PyScript Is Nothing Then Set PyScript = New MSScriptControl.ScriptControl PyScript.Language = "python" PyScript.AddObject "Sheet", Workbooks(1).Sheets(1) PyScript.AllowUI = True End If PyScript.ExecuteStatement "Sheet.cells(1,1).value='Hello'" End Sub
Execute. Enjoy and expand as necessary
                  renick
                   2010-08-25 20:34:15