Error de compilación:Se ha detectadoun nombre ambi

Tengo una hoja de excel en la que tengo dos procedimientos sub que comienzan con:
Private Sub Worksheet_Change (ByVal Target As Range) ...etc.
Un procedimiento lo que me hace es meter la fecha actúa en una celda en función de que otra celda esté rellena.
El otro procedimiento lo que me hace es poner en mayúsculas precisamente la misma celda anterior que sirve de evento para introducir la fecha en una celda del al lado.
El problema es que al meter los dos procedimientos en la misma hoja me sale el siguiente error: "Error de compilación. Se ha detectado un nombre ambiguo. Worksheet_Change.
He estado mirando en esta página y he llegado a la conclusión de que ambos procedimeientos son incompatibles pues tienen el mismo nombre. Pero no sé cómo solucionar el problema.
¿Puedes ayudarme? Mis conocimientos de VBA no son muy grandes.

1 Respuesta

Respuesta
1
Los nombres de procedimientos deben ser todos diferentes para que el compilador sepa donde dirigirse en cada momento. Para solucionar tu caso puedes hacer:
1. Dejar el primer sub tal como está para que se ejecute cuando se produzca el evento Change del objeto Worksheet
2. Dentro de este sub crear una llamada "PasarAMayúsculas" (por ejemplo)
3. Crear un procedimiento sub tal como:
sub PasarAMayusculas ()
    'aquí el código del otro sub
end sub
Si tienes problemas puedes pasarme el fichero a
<h2>[email protected]</h2>
Y le echaré un vistazo.
HOla.
Pero me surge una pregunta que no sé resolver.
¿Cómo se crea una llamada "PasarAMayúsculas" desde este sub?. Dentro del código del primer sub ¿Qué tengo que hacer o crear en este procedimiento?. ¿Es una nueva línea de código con alguna entrada particular?
Y después creo otro procedimiento pero con otro encabezamiento distinto al anterior que tenía de sub..., ¿NO?
Gracias por tu ayuda.
Prueba con el siguiente código; hace lo siguiente:
1. insertas cualquier valor en $G$7
2. Se activa el evento SelecetionChange. Capturo el valor de la celda que se ha modificado.
3. Se dispara el evento change de la hoja, filtro el valor de la celda que me interesa (G7) para que ejecute 2 acciones: a) poner en A1, el valor de la fecha actual y b) ejecuta el procedimiento PonerEnMayusculas.
dim celda as string
dim cambiado as boolean
private sub worksheet_change(...
if celda="$G$7" and cambiado=true then
  cells(1,1).value=date
  PonerEnMayusculas(celda)
end if
end sub
private sub worksheet_selectionchange(...
celda=activecell.address
cambiado=true
end sub
sub PonerEnMayusculas(byval posicion as string)
  range(posicion).value=ucase$(range(posicion).value)
end sub
Es decir aprovecha un evento para ejecutar varias acciones, cada una de ellas encapsulada en un sub diferente.
Perdona que no haya escrito antes pero he estado con problemas médicos.
Verás, he puesto el código y no me sale pues no me deja poner dim... antes del Private... (aunque es cuestión de orden).
Si pudieras mandarme todo el código íntegro con todos los comandos, me resultaría más fácil.
Imaginemos que en la columna E quiero que al poner un dato en una celda, me salga en la columna H la fecha y la hora (todo en la misma fila, lógicamente) y que a la vez en las columnas F y G todo lo que escriba salga en mayúsculas.
¿Cómo sería el código exacto con estos datos concretos?.
Muchas gracias por tu esfuerzo y tu tiempo.
Pásame tu dirección de e-mail. Te enviaré una fichero demo.
Gracias.
Mi dirección de correo electrónico es:
[email protected]
Te repito las gracias por tu ayuda.
OK. Te he enviado una demo a tu dirección
Gracias, ahora sí, ya se cumplen las dos cosas que quería: Fecha con hora y mayúsculas en distintos sitios.
Muchas gracias por tu ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas