I am building an energy system model that is using a combination of VBA and Python (Pyomo). I am using a small piece of VBA code to call a command line, which in turn uses Pyomo. This code is looping to execute a separate Pyomo optimisation for each day.
The code is working perfectly, apart from the message in the image below being triggered. When I step through the code slowly, the message seems to be triggered by the following line of code which is calling a command line:
Call Shell("cmd.exe /S /c" & "pyomo solve --solver=glpk " & Pyomo_file & " " & DAT_file & " --save-results " & Results_file, vbHide)
I have also tried to run this with the string being simplified down into a single string variable, which I called "Command", but the message below was still triggered.
The hyperlink in the message box (https://support.microsoft.com/en-us/office/malicious-macros-were-found-9e461c61-69d1-4ea9-a386-9ad0deaccfdd?ns=excel&version=90&syslcid=1033&uilcid=1033&appver=zxl900&helpid=56779&ui=en-us&rs=en-us&ad=us) suggests that this issue is triggered by AMSI and that my computer thinks this code is malicious. It is not - it is doing exactly what I want it to!! Digging further I think (but may be wrong) that the virus checks are being triggered by the fact that this string is a combination of so many inputs - the virus checker thinks this is obfuscation.
A few further points:
- This line of code is within the daily loop I mentioned above. The error does not get triggered until the loop has already happily executed this line >30 times.
- Bizarrely it seems to get thrown out on the same date each time I try to run the loop. If I skip that date, it falls over again at a later date...
- I have set my macro security settings to "enable all macros" and this still happens. I only have the one Office 365 licence in my organisation (my own company) so I don't think there can be any odd admin permissions causing this problem.
- Finally, I have tried to define the folders I am using as 'safe locations' and this doesn't help either.
Ideally, I would like to just disable the AMSI software while this command line is being executed. But I don't know how to do this of whether it is even possible. If not, any alternative ideas?!