This is a ByVal transfer because of the brackets.
I used to think that too, and while it is mostly effectively correct, it is not technically correct and will behave unexpectedly in some rare cases if that is the expectation. I am guilty of having misled other developers so I will set the record right here.
The brackets actually mean "evaluate the expression". I have never seen the meaning of the brackets around an argument documented in VBA and only discovered the truth recently in the documentation for another flavour of Basic. Thinking back, I believe ChrisO (RIP) said brackets meant Evaluate in a thread so long ago that I didn't have the skill or understanding at the time to appreciate the subtle difference between what he had said and the conventional wisdom I had learnt from another developer. Unfortunately Chris did not elaborate.
Of course evaluating a scalar variable will return the value and cause it to be effectively passed ByVal even when the parameter is declared ByRef.
Evaluating an expression where the expression is an Access Control will result in the Value property being passed because Value is the default property of a Control. Hence it behaves as a though it has been passed as a ByVal argument even when the parameter is declared ByRef and fails if the Sub is expecting an Object. Little wonder that the conventional wisdom prevails.
The reality of brackets meaning Evaluate rather than ByVal can be demonstrated by passing a Field from an ADODB Recordset. The ADODB Field object does not have a default property so surrounding it with brackets has zero effect and the object is still passed ByRef where that is what is specified in the sub definition.
To further disguise the reality, a Sub parameter declared as anything that can be a value (including a Variant) will cause the Value property to be processed in the Sub, even for an ADODB Field, when the Value property was never even mentioned. Only when the parameter is defined as an Object will the the reality be evident.