Lo que pasa es que has creado una subrutina que puede admitir dos parámetros, pero cuando se los pasas te da un error porque llamas a esta subrutina sin más. Sucede que si tu rutina espera un parámetro, sí puedes llamarla sin más, pero si espera más de uno, has de llamarla con la instrucción Call.
Por ejemplo, una subrutina que muestre en mayúsculas el texto que le digas sería
Private Sub Mayusculas(ByVal Texto As String)
MsgBox UCase(Texto)
End Sub
, y a esta subrutina tendrías que llamarla simplemente escribiendo lo siguiente:
Mayusculas "hola"
o bien:
Mayusculas NuevoTexto
(siendo NuevoTexto una variable de tipo STRING).
En cambio, si tu subrutina espera dos ó más variables, debes usar Call; un ejemplo:
Private Sub Unir(ByVal Texto1 As String, ByVal Texto2 As String)
MsgBox Texto1 & Texto2
End Sub
para llamar a esta subrutina, puedes escribir una de estas dos cosas:
Call Unir(Text1.Text, Text2.Text)
,o bien...
Unir Text1.Text, Text2.Text
El error que comentas que te sale es por usar la segunda forma, pero con paréntesis encerrando a los argumentos que quieres pasar a la subrutina. Si quieres encerrarlos entre paréntesis, usa la función Call.
Un saludo,
Pentarou