¿Cómo evito que me salgan mensajes de error en una macro utilizando Visual Basic?

Esto es una parte de un código de reemplazos, es una macro
lo que deseo realizar es que no me salgan los cuadritos de errores, en este caso me sale un cuadro que si deseo actualizar los valores.
En este caso lo que deseo es que si la segunda fecha es la que debe buscar en una carpeta, si no la encuentra que me mande un msg box de que no encuentra la hoja de excel.
Private Sub CommandButton7_Click()
contador = 0
fecha1 = InputBox("Fecha que desea sustituir?", "ORIGEN", Now())
If fecha1 = Empty Then Exit Sub 'mejorar con revisión validez fecha
fecha2 = InputBox("Fecha nueva?", "DESTINO", Now())
If fecha2 = Empty Then Exit Sub 'mejorar con revisión fecha
'Le preguntarás al usuario por las fechas a sustituir y la nueva, y
If fecha2 Is Nothing Then
MsgBox (" No encuentro esta fecha")
Exit Sub
End If
'COMPLEJO PETROQUIMICO MORELOS
For Each c In Selection
buscar = Format(UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd"))
If InStr(4, c.FormulaLocal, buscar, 1) <> 0 Then
c.Replace What:="[MORELOS_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd"), Replacement:="[MORELOS_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "yyyy") & "_" & Format(fecha2, "dd")
contador = contador + 1
End If
Next
For Each c In Selection
buscar = Format(UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd"))
If InStr(4, c.FormulaLocal, buscar, 1) <> 0 Then
c.Replace What:="[servicios_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd"), Replacement:="[servicios_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "yyyy") & "_" & Format(fecha2, "dd")
contador = contador + 1
End If
Next
End Sub
Que si la fecha 2...(por la cual voy a remplazar no c encuentra.. Que me dispare un mensaje de error o un msgbox de que la fecha por la cual deseo remplazar noc encuentra... Ya que si realiza la acción le aparece una ventana de windows donde dice actualizar y tengo que darle muchos cancelar y es tedioso
espero me puedas ayudar!

2 Respuestas

Respuesta
1
No se si entendí bien el proceso, pero creo que colocanco un control delante de de cada instrucción de reemplazo solucionarás el problema. Ej:
For Each c in Selection
buscar =
if instr(4................
On error resume next 
c.Replace......
contador = contador+1     'si la línea anterior dá error seguirá con esta.
Pruébalo y controlá si el contador debe incrementarse o no.
Hola experta elsa coloque el código
On error resume next
En la linea y sigue saliendo los mensajes de error de actualizar los valores
te explico
mi macro realiza remplazo de valores
mis hojas de excel las tengo divididas en carpetas
marzo, abril, mayo etc
mis hojas de excel son de todos los días.
En este caso
Cuando ejecuto la macro y la fecha dos no se encuentra en la carpeta
me aparece la ventanita de actualizar valores y pone valores en ref en la celda
ya que no encontró esa hoja de excel en la carpeta
si la encuentra pues realiza el remplazo normalmente.
Lo que deseo es que no me salga la ventana de actualizar valores por que son muchos y es tedioso dale esc yaparte me pone los valores en ref
y lo que deseo es que no aparezca esa ventana y al usuario le diga que no encontró esa hoja de excel por medio de un msg box
espero me puedas ayudar
de ante mano gracias
saludos cordialesss
EStoy con poco tiempo como para andar adivinando cuál es tu selección y armar libros con tus datos. Enviame tu carpeta lo + reducida que quieras y lo ajusto sobre allí mismo. El correo está en mi sitio
Respuesta
1
No con macros no trabajo, pero...
Lo que podes hacer capaz que te sirve es poner así
on error goto Errores: (adelante del codigo)
aca todo el codigo
EXIT SUB (al terminar el codigo sino te entra en el error)
Errores:
msgbox "Se ha producido un error, revise si existe el archivo"
Hola experto
El código lo puse así
Private Sub CommandButton7_Click()
contador = 1
fecha1 = InputBox("Fecha que desea sustituir?", "ORIGEN", Now())
If fecha1 = Empty Then Exit Sub 'mejorar con revisión validez fecha
fecha2 = InputBox("Fecha nueva?", "DESTINO", Now())
If fecha2 = Empty Then Exit Sub 'mejorar con revisión fecha
'Le preguntarás al usuario por las fechas a sustituir y la nueva, y
'COMPLEJO PETROQUIMICO COSOLECACAQUE
'Selection.Replace What:="[rp" & Format(fecha1, "ddmmyy"), Replacement:="[rp" & Format(fecha2, "ddmmyy"), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
On Error GoTo Errores:
For Each c In Selection
buscar = Format(fecha1, "ddmmyy")
If InStr(4, c.FormulaLocal, buscar, 1) <> 0 Then
c.Replace What:="[rp" & Format(fecha1, "ddmmyy"), Replacement:="[rp" & Format(fecha2, "ddmmyy"), _
lookat:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
contador = contador + 1
End If
Next
Exit Sub
Errores:
MsgBox "Se ha producido un error, revise si existe el archivo"
MsgBox "se han remplazado" & contador
End Sub
Me sigue saliendo la ventanita de windows
de que si deseo actualizar datos
y al final
me llena las celdas
con puro ref
eso significa de que no encontró los archivos
y pues no quiero que salga las ventanitas de windows
por que son muchos esc que tengo que dar
y es tediioso
espero me puedas ayudar
gracias
saludos
2 cosas vamos aprobar
Primero vas a pasar el on error arriba de selection. Replace
creo que desde ahí se dispara el error.
Y después si eso no funciona necesito que vuelvas a poner el on error donde estaba y que generes un error vos a propósito con algo que funcione, para ver
si el on error esta funcionando bien en el macro.
Porque sino tendrías que averiguar a quien responde primero el excel, porque quizás el excel, acordate que es un programa propio, maneja sus propios errores y quizás este priorizando su manejo, creo que hay una opción donde podes cancelar esto y que vos controles los mensajes
Sabes que en mi casa tengo un libro de macros en excel y me olvide de chequear ahí, te prometo que hoy a la noche de argentina lo reviso.
Si experto
Muchas gracias el detalle
Que es este código
For Each c In Selection
buscar = Format(fecha1, "ddmmyy")
If InStr(4, c.FormulaLocal, buscar, 1) <> 0 Then
c.Replace What:="[rp" & Format(fecha1, "ddmmyy"), Replacement:="[rp" & Format(fecha2, "ddmmyy"), _
lookat:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
contador = contador + 1
donde dice remplacement rp format fecha 2
me imagino es que ahi es donde busca la fecha 2
pero no c como ponerle algo ahi
para que me dispare un mensaje de error
si no encuentra esa fecha en la carpetaaa
gracias saludos cordialesss
pone el error goto errores, desde aca.
'COMPLEJO PETROQUIMICO COSOLECACAQUE
'Selection.Replace What:="[rp" & Format(fecha1, "ddmmyy"), Replacement:="[rp" & Format(fecha2, "ddmmyy"), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
HABER QUE PASA, con esto el error tendría que saltear
saludos
Hola experto
Tengo este código
For Each c In Selection
buscar = Format(fecha1, "ddmmyy")
If InStr(4, c.FormulaLocal, buscar, 1) <> 0 Then
c.Replace What:="[rp" & Format(fecha1, "ddmmyy"), Replacement:="[rp" & Format(fecha2, "ddmmyy"), _
lookat:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
Set fecha = Selection.Find(What:="[rp" & Format(fecha2, "ddmmyy"))
If fecha Is Nothing Then
MsgBox "FECHA DE REMPLAZO NO EXISTE, CAMBIE LA FECHA"
Else
contador = contador + 1
End If
End If
Next
Ok con el código ¿El error goto errores te funciona?
Necesito que obligues a un errores antes de que te de el error de siempre
antes del replace, invéntate un error.
Si eso funciona, el error esta en el proceso del excel y ahí es donde tenemos que atacar
Pero donde coloco el error
For Each c In Selection
buscar = Format(fecha1, "ddmmyy")
If InStr(4, c.FormulaLocal, buscar, 1) <> 0 Then
c.Replace What:="[rp" & Format(fecha1, "ddmmyy"), Replacement:="[rp" & Format(fecha2, "ddmmyy"), _
lookat:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
Set fecha = Selection.Find(What:="[rp" & Format(fecha2, "ddmmyy"))
If fecha Is Nothing Then
MsgBox "FECHA DE REMPLAZO NO EXISTE, CAMBIE LA FECHA"
Else
contador = contador + 1
End If
End If
Next
adelante del for???
Saludos cordialesssss
Arriba de esto
'COMPLEJO PETROQUIMICO COSOLECACAQUE
'Selection.Replace What:="[rp" & Format(fecha1, "ddmmyy"), Replacement:="[rp" & Format(fecha2, "ddmmyy"), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas