Scripts can much more than macros, but there are some things which cannot be done with scripts.
For example it is not possible with scripts to select a text from actual cursor position or expand an existing selection to end of a found string with a
Find Select like it is possible with macros which I often use in my macros.
On the other hand there are script commands and properties not available in the macro environment. See
Scripting reference for all available UltraEdit scripting functions and properties and
Macro commands for all available UltraEdit macro commands and their parameters.
An advantage of macros is that they can be quickly recorded and re-run to redo some commands on the current file. I use that very often. Scripts must be always programmed, they cannot be recorded. That requires programming skills and more time when just do something with the actual file and then the script is not needed anymore.
Scripts have the big advantages of support for variables, easy string manipulations in RAM and there is the possibility to work with the output window. Nesting of loops is also possible in scripts, but not in macros.
In scripts you can also easily add comments which is not possible for macros (except with a workaround). The source of a script can be also easily viewed and formatted with indentations and directly edited in the document window. That's not possible for macros (except with a workaround). The error messages are often better for scripts than for macros.
Scripts are really well when they are designed for a job which must be done daily, weekly or monthly especially when reports should be also created by the scripts. Creating reports with macros is not so easy, mainly because it is not possible to simply copy a fixed text into a clipboard without the usage of an edit window and because there are no variables (counters).
Scripts are also better when working on multiple documents at the same time because data can be modified in a document which currently does not have the focus. In macros the document/window must be always switched when data in another file should be modified or read.
Scripts are now better for complex jobs. But for simple tasks I would still prefer macros over scripts.
On execution of a script the current output window content is overwritten with status information of script interpreter except
Show status information in output window is unchecked at
Advanced - Settings or Configuration - Scripting. This setting should be always enabled on script development as otherwise errors detected by scripting engine are not displayed anywhere. When entire script is fully tested, this setting can be disabled to prevent current output window content to be overwritten on script execution. The execution of a macro never results in overwriting the current output window content.
A macro edited in
Edit/Create Macro dialog is compiled on closing the macro and confirming the change. Therefore a syntax error in macro code is immediately detected. This is not the case for a script. While the script engine makes a basic syntax check on start of script execution, some errors like referencing value of a variable which was not defined in code executed before are detected by script engine only on executing the appropriate line. Therefore testing a script to detect errors means that really each line must be executed once. That means each branch of every IF condition must be at least once executed by running the script several times with various inputs respectively under various use cases to make sure that really each line in script works and does not result in an error on execution.