Macro funciona, pero al llamarla con código no

Hola experto tengo un pequeño problema con un código y una macro que no puedo combinar pues no corre al llamarla con código.
En un modulo puse el código para la macro "minusculas" que lo que hace es ponerme las letras de cada inicio de palabra por celda en mayúsculas
Sub minusculas()
For Each cell In Selection
cell.Value = Application.WorksheetFunction.Proper(cell.Value)
Next cell
End Sub
para llamar la macro y ejecutarla luego de hacer enter en la celda seleccionada codigo
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Run "minusculas"
End If
End Sub
Entonces al poner un texto en la celda A1 no importa el largo de palabras debería pasarme las primeras letras de cada palabra a mayúsculas al presionar el enter, lo que no ocurre, pero si llamo a la macro con alt+f8 se ejecuta perfectamente.
Bueno eso de antemano muchas gracias.
Saludos
Pacnho.

1 Respuesta

Respuesta
1
1- Tu macro "minusculas" de preferencia debe de estar en un modulo "normal"
2- El evento Change debe estar en el modulo de la hoja en donde deseas se "dispare"
3- No uses RUN debes usar CALL
4- Tu macro "minusculas" hace referencia a SELECTION, con lo que los cambios solo surtirán efecto en la celdasseleccionadas (sombreadas)
Abraham
Sigue sin funcionar.
Bueno cambie el código del llamado por este

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "A1" Then
Call minusculas
End If
End Sub
Y el de la macro que funciona perfectamente llamándola con la combinación de teclas(alt+f8)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "A1" Then
Call minusculas
End If
End Sub
No quiere nada, no funciona el llamado lo puse en un libro de ejemplo para probarlo aun así nada. No entiendo lo del selection la verdad es que soy novato en VBA. Como debería ser para que al escribir el texto y al presionar el intro se ejecute la instrucción.
dejo ejemplos gráficos del proceso.
ingresando el texto

luego de correr la macro en forma manual

Saludos y gracias por el tiempo y la atención prestados.
Pancho.
Hummm... en un modulo "normal":
Sub minusculas()
Dim cell as Range
For Each cell In ActiveSheet.Range("A1:F100")
cell.Value = Application.WorksheetFunction.Proper cell.Value)
Next cell
End Sub
en el modulo de la hoja:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then 
Call "minusculas"
End If
End Sub
Me he guiado de lo que tu has venido planteando. Otra cosa, no olvide que es muy importante, si tanta es tu necesidad de usar macros, pues leer más sobre VBA
Abraham
Funciona gracias, peeeero, tiene error y me gana, lo siento me gustaría hacerlo solo pero me gana te pego las caps del error.
Error en libro

error en VBModulo normal

error en VBModulo de hoja1

Y aquí es donde quiero usar esta macro más la llamada para que sepas un poco lo que quiero lograr, la celda que quería se modificara cada vez que ingresaran el texto si tener que hacerlo manual es la "P6"

Bueno de más estar muchas gracias por todo.
Saludos
Pancho.
Ahhh... no ahorrábamos tiempito si lo mencionabas en un inicio, jejejej. En el modulo de la hoja:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$P$6" Then
Target = Application.WorksheetFunction.Proper(Target)
End If
End Sub
Nada más :)
Abraham
Gracias gracias y más gracias, realmente me has ayudado mucho, ¿ahora si quisiera agregar más celdas a esa misma instrucción quedaría algo así? Es que lo hice y como que se anulo :'(
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$P$6;$C$8;$U$8" Then
Target = Application.WorksheetFunction.Proper(Target)
End If
End Sub
? Gracias por todo.
Saludos
Pancho.
Debes usar OR:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Or Target.Address = "$B$1" Then
Target = Application.WorksheetFunction.Proper(Target)
End If
End Sub
Abraham
Muchas gracias, has sido de excelente ayuda. Solucionaste mi dude, aunque lo de que lo hiciera de más de una celda, no resulto, pero bueno por ahí otro experto me dijo una vez, solo una pregunta por tema, muchas gracias por tu tiempo.
Y excelente respuesta.
Saludos.
Pancho.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas