I’ve found many scenarios where there are certain users or groups that require execute permissions for all stored procedures in a database. Rather then granting access to all the objects individually, not to mention new objects that are created after you’ve granted access, I prefer to create an executor role and assign their user account to the role. The following works for SQL 2005 and above:
CREATE ROLE db_executor
GRANT EXECUTE TO db_executor
Then grant the db_executor role to their user account. Done!