The documentation says this about private and protected functions in Blueprints:
[TABLE]
Protected
A setting of Protected means that the Function can only be called by the current Blueprint, as well as any Blueprints that derive from the current Blueprint.
Private
A setting of Private means that the Function can only be called from within the current Blueprint.
In reality, it seems like these settings do nothing? Regardless of whether I set a function to private, protected, or public, it seems it can be accessed and called by any other BP, without even a warning.
This problem exists since Unreal 4 first versions were made public and probably will never be fixed unless someone else solve the problem and submit to Github
I am using 5.5.4 and it works. After recompiling a blueprint that tries to use a private or protected function, but only when it is connected to the exec input/output.