Я думаю, что ответ jtolle лучше всего отвечал на этот вопрос - небольшая ссылка на Application.Run может быть ответом.Спрашивающий не хочет использовать просто func1 или Module1.func1 - причина, по которой в первую очередь нужно использовать CallByName, заключается в том, что желаемое имя function.sub не известно во время компиляции.В этом случае Application.Run работает, например:
Dim ModuleName As String
Dim FuncName As String
Module1Name = "Module1"
FuncName = "func1"
Application.Run ModuleName & "." & FuncName
Вы также можете добавить имя проекта перед именем модуля и добавить еще один период ".".К сожалению, Application.Run не возвращает никаких значений, поэтому, пока вы можете вызывать функцию, вы не получите ее возвращаемое значение.