Dar Enter y me ejecute la macro y msgbox

Listo Dante Amor, ahora es que cuando doy enter me pregunte si deseo agregar otro cliente, este es el código que hice pero solo me lo corre en la Fila 11

Dim Resp As Byte
If Hoja1.Range("E11") = 0 And Hoja1.Range("J11") > 0.099 Then
Else
End If
If Hoja1.Range("E11") <> 0 And Hoja1.Range("J11") > 0.059 Then
Else
End If
Resp = MsgBox("Agregar otro cliente?", vbYesNo + vbExclamation, "AVISO")
If Resp = vbYes Then
Hoja1.Range("B12").Select
Else
If Resp = vbNo Then
If Hoja1.Range("E11") = 0 And Hoja1.Range("J11") > 0.099 Then
Else
If Hoja1.Range("E11") <> 0 And Hoja1.Range("J11") > 0.059 Then
Else
End If
End If
Call Hoja1.Enviar
End If
End If

Si le doy si, agrego otro cliente, si le doy no, guarda y envía el archivo (este proceso el de guardar y enviar ya lo tengo hecho y probado)

Respuesta
2

Me puedes comentar a qué te refieres con dar "Enter"

Haber si te refieres a esto: En excel para ejecutar una macro en automático se tiene que activar un evento en la hoja, los eventos pueden ser:

- Seleccionar una celda

- Modificar una celda

- Activar una hoja, es decir, seleccionar una hoja

- Desactivar una hoja, es decir, seleccionar otra hoja

- Seguir un hipervínculo

Pero no existe un evento que haga que se ejecute una macro en automático con solamente el hecho de presionar enter.

Es por eso que no entiendo a qué te refieres con:

Dar Enter y me ejecute la macro


Podrías explicar un poco más.

También olvida tu macro, porque no la entiendo, mejor explícame con tus palabras y con ejemplos reales (puedes poner imágenes de tu hoja) lo que necesitas.

Entre más claros sean los ejemplos acompañados de imágenes, más fácil podré entender y más práctico podré ayudarte.

¿Tienes la macro en los eventos de tu hoja?

¿Puedes poner la macro completa?

En tu imagen no se ven las columnas ni las filas de la hoja. Entonces tengo que suponer la columna y la fila, sería más fácil si tu ejemplo es más completo.

¿Y cómo haces para que la macro se ejecute cuando presionas Enter? Me puedes explicar

Es lo que quiero saber si se puede, a lo mejor no me explique bien.

Me refiero a que cuando ya llené los datos solicitados y se cumplen las condiciones, por ejemplo en la última celda L12, pongo $600.00, me mande un msg que me diga si deseo agregar otro cliente, si le doy que si, puedo seguir llenado los datos, si le digo que no, manda llamar un evento que swellama enviar y guarda, convierte en pdf y enviar por correo ese pdf.

en la primer imagen usé un Application.OnKey, pero solo me corre una fila

Esta es la otra parte la Macro

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("B11:B20")) Is Nothing Then
Cancel = True
frm_Cliente.Show
Else
End If
If Not Intersect(Target, Range("D11:D20")) Is Nothing Then
frm_Proveedor.Show
Else
End If
End Sub

Sub FormulaRango()
ActiveSheet.Unprotect "Fulcrum07"
Hoja1.Range("E11:E20").Formula = "=IFERROR(VLOOKUP(D11,Proveedores!$A$2:$B$34,2,FALSE),"""")"
ActiveSheet.Protect "Fulcrum07"
End Sub

Sub Enviar()
nombre = Cells(7, 3).Value
folio = Cells(5, 12).Value
fecha = Cells(7, 12).Value
mes = Format(Date, "mmmm")
año = Year(Date)
ruta = "K:\Ordenes de Compra\EXPOSICION\"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
ruta & nombre & "" & folio, Quality:= _
xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=True
Application.DisplayAlerts = False
ActiveSheet.Unprotect "Fulcrum07"
Range("L5").Value = Range("L5").Value + 1
Range("B11:D11,B12:D12,B13:D13,B14:D14,B15:D15,B16:D16,B17:D17,B18:D18,B19:D19,B20:D20,F11:I11,F12:I12,F13:I13,F14:I14,F15:I15,F16:I16,F17:I17,F18:I18,F19:I19,F20:I20,C24:N24,B25:N25,B26:N26,B27:N27,L11:L20,J11:J12").ClearContents
ActiveSheet.Protect "Fulcrum07"
ActiveWorkbook.Save
strReportName = "K:\Ordenes de Compra\EXPOSICION\OrdendeCompra_Jorge Suarez.xlsm"
Dim objOutlook As Object
Dim objMail As Object
Dim objOutlookAttach As Object
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(olMailItem)
Set objOutlookAttach = objOutlook.CreateItem(olAttachMents)
With objMail
'A quien va dirigido el correo
.to = ""
.CC = ""
.BCC = ""
'Se especifica el asunto
.Subject = " O.C. De " & fecha & nombre & folio
'Se escriben el o los archivos a adjuntar en el mail
On Error Resume Next
.Attachments.Add ruta & nombre & " " & folio & " .pdf"
.Body = "Se anexa orden de compra favor de confirmar recepción"
'Se manda el mensaje
.Send
End With
'Se cierran todos los objetos utilizados
Set objMail = Nothing
Set objOutlook = Nothing
ActiveWorkbook.Close
End Sub

Te sugiero que elimines Application. OnKey, ya que cada que des enter en cualquier parte del libro te va a hacer la pregunta.


Lo que tienes que utilizar es el evento Change.

Pon lo siguiente en los eventos de tu hoja:

Private Sub Worksheet_Change(ByVal Target As Range)
'Por Dante Amor
    'Si cambia el valor de la celda en el rango L12 a L20
    If Not Intersect(Target, Range("L11:L20")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        If Target.Value = "" Then Exit Sub
        '
        res = MsgBox("deseo agregar otro cliente", vbQuestion & vbYesNo, "CLIENTES")
        If res = vbYes Then Exit Sub
        '
        Call Enviar 'aquí pones la macro que envía y guarda
    End If
End Sub


Funciona de esta manera, después de modificar alguna celda del rango L11:L20, se activa el evento change, te pregunta si quieres otro cliente, si dices que sí entonces puedes capturar otro cliente. Si dices que no, entonces se ejecuta la macro Enviar.


[' Si es lo que necesitas. No olvides valorar la respuesta. 

¡Gracias! Es lo que quería, de cualquier forma si surge otra duda te puedo volver a molestar?

Muchas gracias por tu apoyo

Una ultima duda, esta rutina la puedo meter dentro de la sub Validar? 

No.

Esa rutina debe ir en los eventos de la hoja. Si la pones en otro lado no se va a ejecutar de manera automática.

Solamente inténtalo y verás varios errores. De esa forma se aprende a ensayo y error. No pierdes nada con probar, por el contrario ganas con nuevo aprendizaje.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas