"I have a data base with over 200 files (Speeches) containing a text field (Text) which contains a speech by someone."
Perhaps you mean 200 records in a single file?
I think it might be easier to write a script that performs the style change one selected word at a time.
If you really want to do this in a single calculation, you could nest your use of the substitute function like this:
Substitute ( Substitute ( Text; "SUN" ; TextStyleAdd ("SUN" ;Bold )) ; "Vertical" ; textstyleAdd("VERTICAL" ; Bold ))
Note that your expression also changes all instances of the word to all caps as well as bold.
The resulting expression needed for 40 or 50 key words would be truly horrendous in complexity.
Instead, I'd put all the key words in either a single text field separated by carriage returns or a separate records in a table.
Then my script could be set up in a loop to perform a replace field contents with a single Substitute calculation but for a different word each time.
If your keywords are static, you could do:
Substitute ( Text;
[ "Vertical" ; TextStyleAdd ( "Vertical" ; Bold ) ] ;
[ "horizontal" ; TextStyleAdd ( "horizontal" ; Bold ) ] ;
[ "center" ; TextStyleAdd ( "center" ; Bold ) ] ;
If not, you will need a custom recursive function (requires Filemaker Advanced) or a script to achieve this - see example.
Note: the Substitute() function is case-sensitive - in the above example, "vertical" and "Horizontal" would NOT be highlighted.