The only thing I wonder about is the "notification as boolean" you have there at the end. VB isn't my strength, so maybe that is valid syntax, but in C# I'd expect to see it more like DotNetNuke.Security.Roles.RoleController.AddUserRole(objUser, objRole, this.PortalSettings, startDate, endDate, userID, notification); the "this.PortalSettings" (or Me.PortalSettings) would be if you are calling that directly from a module control that inherits from PortalModuleBase -- it'll have a reference to the PortalSettings automatically. Otherwise your code to get the existing portalsettings *should* be fine. At least, I tried that in C# and it worked fine.
Here is something that talks about the named parameters: http://msdn.microsoft.com/en-us/library/0t9f1e9s(VS.80).aspx but I looked at the code for that call and it doesn't look to me like it is expecting a specific name for the parameter.
BTW, for other readers -- the static call to the AddUserRole was added in one of the later versions (not present in 4.6.2); I'm not sure which version added the functionality, but it was at least some time after 4.6.2.