Msgbox "articulo no encontrado"

Hola,
Tengo el siguiente codigo el cual  desde un archivo pega datos a otro archivo dependiendo del nombre de la hoja. Lo que he estado tratando y no puedo darle es introducir un mensaje en el cual si no encuentra el nombre de la hoja no se ejecute y envie un aviso en el cual mencione que nombre(s) no encontro.
Me pueden ayudar por favor.
Gracias y un saludo
Sub oc()
Dim wkb As Workbook
Application.ScreenUpdating = False
Set wkb = Workbooks("Modulo_OC.xls")
 ActiveSheet.Select
ultfila = Range("B" & Rows.Count).End(xlUp).Row
For Each celda In Range("A17:A" & ultfila)
 Workbooks("Modulo_Inventario.xls").Activate
  With Sheets(celda.Value)
filault = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A" & filault) = celda.Value
.Range("A" & filault).Offset(0, 1) = Date
.Range("A" & filault).Offset(0, 2) = "ENTRADA"
.Range("A" & filault).Offset(0, 3) = wkb.ActiveSheet.Range("G2").Value
.Range("A" & filault).Offset(0, 4) = wkb.ActiveSheet.Range("B2").Value
.Range("A" & filault).Offset(0, 5) = wkb.ActiveSheet.Range("B10").Value
.Range("A" & filault).Offset(0, 6) = celda.Offset(0, 4).Value
.Range("A" & filault).Offset(0, 7) = celda.Offset(0, 5).Value
If Not IsNumeric(Sheets("MENU").Range("C18")) Then
If celda.Offset(0, 5).Value = "USD" Then .Range("A" & filault).Offset(0, 8) = .Range("A" & filault).Offset(0, 6) * Sheets("MENU").Range("D18")
Else
.Range("A" & filault).Offset(0, 8) = .Range("A" & filault).Offset(0, 6) * Sheets("MENU").Range("C18")
End If
If celda.Offset(0, 5).Value = "MXP" Then .Range("A" & filault).Offset(0, 8) = .Range("A" & filault).Offset(0, 6) * 1
.Range("A" & filault).Offset(0, 9) = celda.Offset(0, 3).Value
If Not IsNumeric(.Range("A" & filault).Offset(-1, 11)) Then
.Range("A" & filault).Offset(0, 11) = .Range("A" & filault).Offset(0, 11) + celda.Offset(0, 3).Value
Else
.Range("A" & filault).Offset(0, 11) = .Range("A" & filault).Offset(-1, 11) + celda.Offset(0, 3).Value
End If
.Range("A" & filault).Offset(0, 13) = .Range("A" & filault).Offset(0, 9) * .Range("A" & filault).Offset(0, 8)
If Not IsNumeric(.Range("A" & filault).Offset(-1, 15)) Then
.Range("A" & filault).Offset(0, 15) = .Range("A" & filault).Offset(0, 15) + .Range("A" & filault).Offset(0, 13)
Else
.Range("A" & filault).Offset(0, 15) = .Range("A" & filault).Offset(-1, 15) + .Range("A" & filault).Offset(0, 13)
End If
End With
Next celda
 wkb.ActiveSheet.Activate
MsgBox "ORDEN DE COMPRA RECEPCIONADA EN" & Chr(13) & "MODULO DE INVENTARIOS"
Application.ScreenUpdating = True
End Sub

1 respuesta

Respuesta
1
Podrías agregar este control:
For Each celda In Range("A17:A" & ultfila)
 Workbooks("Modulo_Inventario.xls").Activate
esta = 0
for i = 1 to Sheets.count
if sheets(i).name = celda.value then esta = 1 
next
if esta = 0 then
msgbox "No se encuentra la hoja " & celda.value
else
With Sheets(celda.Value)
'el resto de tus líneas
end with
end if
next celda
Probala y si todo quedó bien, no olvides finalizar la consulta.
Sdos
Elsa
PD) Te recomiendo mi manual 400MacrosPlus. Todo lo que necesitas saber sobre errores, bucles... etc
http://aplicaexcel.galeon.com/manuales.htm
Muchas gracias Elsa,
Esta perfecto el control,solo como mencionaba en mi pregunta que habria que hacer para que no ejecutara la macro si no encuentra alguna hoja?
Gracias y saludos.
Reitero: primero con un bucle hay que ver si se encuentra la hoja, si no se encuentra parecerá un mensaje (opcional, podés darle al exit sub allí mismo)
Si la hoja existe continua con el resto de tus líneas
Si no querés que se 'ejecute la macro', entonces el bucle que busca la hoja debe estar en la macro que llama a esta macro... si la hoja no está no la llama... creo que está claro, ¿verdad?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas