Ejecutar macros (otra vez)

Hola...
Otra vez yo... Como molesto... La pregunta pasada estuvo bien contestada, pero ahora tengo otra más difícil (para mi) es lo mismo, pero lo primero que en caso de que no sepas que celda sea en la que se escriba "cancelado", que sea por una búsqueda.. Y al encontrar la celda esa sea la que se modifica, y como colocar en un textbox el nombre de la celda encontrada o sea "A2" o "F16" etc. Gracias...

1 Respuesta

Respuesta
1
Se está poniendo más interesante, aunque me resulta extraña la situación.
Porque, así planteada, pareciera que siempre que hubiese un cambio, deberá hacer este control y ejecutar los comandos de la macro. Esto sería sumamente tedioso en mi opinión, pero depende de toda tu situación que, desde luego, desconozco.
OK, el evento que dispare la macro seguirá siendo cualquier cambio en la hoja.
Activa el editor de Visual Basic (presiona Alt+F11) y busca la hoja donde quieres que esto ocurra (donde se escribirá "Cancelado"). Da doble click sobre ella. (Otra forma de llegar a este punto es hacer click derecho sobre la solapa de esta hoja y elegir la opción "Ver Código)
Copia el código siguiente y pégalo en el panel desplegado a la derecha de su Editor de Visual Basic:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'------- Variables
'Ingresa aquí la palabra clave para la búsqueda:
BuscarDato = "Cancelado" 'Palabra a buscar
'------------------------ gracias...
Set Encontrado = ActiveSheet.Cells.Find(BuscarDato, LookIn:=xlValues, LookAt:=xlWhole)
If Not Encontrado Is Nothing Then
DIRECC = Encontrado.Address(False, False)
Encontrado.Select
MsgBox "La palabra " & BuscarDato & Chr(10) & "Está en la celda " & DIRECC, vbInformation, "ENCONTRADO"
'ingresa aquí otros comandos a ejecutar cuando haya una busqueda exitosa...
End If
Set Encontrado = Nothing
End Sub
Al inicio del código, coloqué una variable para incluir la palabra que deberá buscarse.
Cierra el Editor y graba el archivo.
A partir de entonces, cada vez que cambie el contenido de la hoja, la macro buscará dónde está la palabra "Cancelado" (o la que incluyas en la variable)
En caso de que la encuentre, aparecerá un mensaje, avisándote.
---
Si, de casualidad, simplemente quieres que ejecute la macro cuando se ingrese esa palabra en cualquiera celda, es decir que no controle que sea en una celda específica, la macro que lo efectúa sería esta:
'------- Variables
'Ingresa aquí la palabra clave para la búsqueda:
BuscarDato = "Cancelado" 'Palabra a buscar
'------------------------ gracias...
If UCase(Target.Value) = UCase(BuscarDato) Then
DIRECC = Target.Address(False, False)
MsgBox "La palabra " & BuscarDato & Chr(10) & "Está en la celda " & DIRECC, vbInformation, "ENCONTRADO"
'ingresa aquí otros comandos a ejecutar cuando haya una busqueda exitosa...
End If
End Sub
---
Bien, prueba las dos y espero que alguna sea lo que buscas. Sino, pregúntame de nuevo.
Un abrazo!
Fernando
Lo que pasa es que estoy muy nervioso porque me están presionando con este trabajo y "no puedo"... te lo voy a tratar de explicar mejor. Tengo un textbox llamado "txtNumero" este esta en un formulario para cancelar cheques, al ingresar el numero hace una búsqueda, quiero que al encontrar ese numero, en la celda siguiente, se escriba cancelado y se ejecute "mi macro", es una base de datos, entonces no tengo especificado el cheque que se cancelara..., esto sera por una búsqueda.. ya tengo el código de búsqueda, espero tu respuesta. Y de antemano muchas gracias, o si me podrías dar tu correo para poder explicarte un poco más a detalle... otra vez gracias
Esto es un tanto distinto a lo que venías pidiendo...
Usualmente, lo que pides puede estar asociado a un botón de comando (o puede estar asociado a la salida del textobox). ASumiré que es el primer caso.
Inserta un botón en tu formulario y dad doble click sobre él. Esto te llevará al panel de declaraciones del formulario.
Ingresa allí este código:
Private Sub CommandButton1_Click()
'------- Variables
'Ingresa aquí el rango donde debe efectuar la búsqueda búsqueda:
BuscarEn = "C8:C800"
'------------------------ gracias...
BuscarDato = Val(TxtNumero.Value)
Set Encontrado = ActiveSheet.Range(BuscarEn).Find(BuscarDato, LookIn:=xlValues, LookAt:=xlWhole)
If Encontrado Is Nothing Then
MsgBox "El cheque Nº " & Trim(BuscarDato) & Chr(10) & "no figura en la base", vbCritical, "NO ENCONTRADO"
TxtNumero.Value = ""
TxtNumero.SetFocus
Else
DIRECC = Encontrado.Address(False, False)
Encontrado.Select
Encontrado.Offset(0, 1).Value = "Cancelado"
MsgBox "El cheque Nº " & Trim(BuscarDato) & Chr(10) & "Está en la celda " & DIRECC, vbInformation, "ENCONTRADO"
'ingresa aquí otros comandos a ejecutar cuando haya una busqueda exitosa...
'o "Mi_Macro"
End If
Set Encontrado = Nothing
End Sub
Al inicio de la macro indico un rango donde deberá buscar los números de cheque. Supongo que si se trata de una base de datos bien estructurada los números de cheques estarán en una misma columna.
Si existe coincidencia, la macro coloca la palabra Cancelado en la celda que está la derecha del número encontrado, selecciona la celda y muestra un mensaje con la dirección del hallazgo.
Desde luego puedes modificar estas acciones para que haga lo que necesitas.
Si no lo encuentra, mostrará un mensaje de error y volverá al textbox para que reingreses.
Ojala que esto ayude a quitarte presión.
Un abrazo!
Fernando

Añade tu respuesta

Haz clic para o