¿como capturo un mensaje de error ?

11/10/2005 - 17:30 por gdiaz | Informe spam
hola, tengo el siguiente problema:
tengo una macro que pide se capture un el nombre para una hoja nueva, que
puedo hacer si el usuario captura un nombre que ya existe, para que la macro
no truene y le vuelva a pedir otro nombre?

Preguntas similare

Leer las respuestas

#1 gdiaz
11/10/2005 - 18:33 | Informe spam
Manuel, te voy a poner parte del codigo para que veas como tengo el problema:
primero cree un user form para capturar el nombre que quiere el usuario, al
que llame "userform1", el cuadro de texto retiene la informacion.
luego creo la nueva hoja y le doy todos los formatos que necesita la hoja y
al final le cambio el nombre "mes_new" al nombre del usuario asi:

'esta parte le pone el nombre a la hoja que el usuario definio
Sheets("mes_new").Select
Sheets("mes_new").Name = UserForm1.Text1.Text

pero si el usuario repite un nombre que ya existe truena la macro y deja
todo sin terminar.
lo que tu me dices es un loop, pero no estaria haciendo lo mismo? ademas de
que no esta en vba, no? ya que hice una prueba y me marca procedimiento
interno no valido en el do


"Manuel Romero" escribió:

dim nombre as string
dim wb as sheet

do
nombre=inputbox("deme un nombre:")
set wb=activeworkbook.sheets(nombre)
loop until wb is nothing

> hola, tengo el siguiente problema:
> tengo una macro que pide se capture un el nombre para una hoja nueva, que
> puedo hacer si el usuario captura un nombre que ya existe, para que la macro
> no truene y le vuelva a pedir otro nombre?



Respuesta Responder a este mensaje
#2 KL
11/10/2005 - 20:59 | Informe spam
Hola gdiaz,

Que tal esto:

On Error Resume Next
Set ws=Sheets(UserForm1.Text1.Text)
On Error GoTo 0
If ws Is Nothing Then
Sheets("mes_new").Name = UserForm1.Text1.Text
Else
MsgBox "Aqui va tu mensaje"
End If

Saludos,
KL


"gdiaz" wrote in message
news:
Manuel, te voy a poner parte del codigo para que veas como tengo el
problema:
primero cree un user form para capturar el nombre que quiere el usuario,
al
que llame "userform1", el cuadro de texto retiene la informacion.
luego creo la nueva hoja y le doy todos los formatos que necesita la hoja
y
al final le cambio el nombre "mes_new" al nombre del usuario asi:

'esta parte le pone el nombre a la hoja que el usuario definio
Sheets("mes_new").Select
Sheets("mes_new").Name = UserForm1.Text1.Text

pero si el usuario repite un nombre que ya existe truena la macro y deja
todo sin terminar.
lo que tu me dices es un loop, pero no estaria haciendo lo mismo? ademas
de
que no esta en vba, no? ya que hice una prueba y me marca procedimiento
interno no valido en el do


"Manuel Romero" escribio:

dim nombre as string
dim wb as sheet

do
nombre=inputbox("deme un nombre:")
set wb=activeworkbook.sheets(nombre)
loop until wb is nothing

> hola, tengo el siguiente problema:
> tengo una macro que pide se capture un el nombre para una hoja nueva,
> que
> puedo hacer si el usuario captura un nombre que ya existe, para que la
> macro
> no truene y le vuelva a pedir otro nombre?



Respuesta Responder a este mensaje
#3 gdiaz
11/10/2005 - 21:31 | Informe spam
Muy bien KL, solo que ahi se detiene la macro, no hay alguna opcion para que
capture el error, pida un nuevo nombre y siga con la macro?

"KL" escribió:

Hola gdiaz,

Que tal esto:

On Error Resume Next
Set ws=Sheets(UserForm1.Text1.Text)
On Error GoTo 0
If ws Is Nothing Then
Sheets("mes_new").Name = UserForm1.Text1.Text
Else
MsgBox "Aqui va tu mensaje"
End If

Saludos,
KL


"gdiaz" wrote in message
news:
> Manuel, te voy a poner parte del codigo para que veas como tengo el
> problema:
> primero cree un user form para capturar el nombre que quiere el usuario,
> al
> que llame "userform1", el cuadro de texto retiene la informacion.
> luego creo la nueva hoja y le doy todos los formatos que necesita la hoja
> y
> al final le cambio el nombre "mes_new" al nombre del usuario asi:
>
> 'esta parte le pone el nombre a la hoja que el usuario definio
> Sheets("mes_new").Select
> Sheets("mes_new").Name = UserForm1.Text1.Text
>
> pero si el usuario repite un nombre que ya existe truena la macro y deja
> todo sin terminar.
> lo que tu me dices es un loop, pero no estaria haciendo lo mismo? ademas
> de
> que no esta en vba, no? ya que hice una prueba y me marca procedimiento
> interno no valido en el do
>
>
> "Manuel Romero" escribio:
>
>> dim nombre as string
>> dim wb as sheet
>>
>> do
>> nombre=inputbox("deme un nombre:")
>> set wb=activeworkbook.sheets(nombre)
>> loop until wb is nothing
>>
>> > hola, tengo el siguiente problema:
>> > tengo una macro que pide se capture un el nombre para una hoja nueva,
>> > que
>> > puedo hacer si el usuario captura un nombre que ya existe, para que la
>> > macro
>> > no truene y le vuelva a pedir otro nombre?
>>
>>
>>



Respuesta Responder a este mensaje
#4 gdiaz
11/10/2005 - 22:07 | Informe spam
estuve haciendo unas pruebas y me surgio otra duda, como te daras cuenta no
soy muy bueno para esto

On Error Resume Next
Set ws=Sheets(UserForm1.Text1.Text)
On Error GoTo 0
If ws Is Nothing Then


aqui le pones que si ws no vale nada entonces le ponga el valor de
UserForm1.Text1.Text, pero en ese caso que no seria nulo?
otra mas, si no es nulo el valo cuando lo va a poner, siempre me va a estar
mandando al error no?, porque no hay opcion de escoger una respuesta valida?,
o me equivoco?

Sheets("mes_new").Name = UserForm1.Text1.Text
Else
MsgBox "Aqui va tu mensaje"
> End If



te mando el cuerpo completo de mi macro para que la veas:

Sub Nombra_mes()
'
' Nombra_mes Macro
' Acceso directo: CTRL+t
' Macro grabada el 27/09/2005 por Gabriel Diaz
' cualquier comentario favor de dirigirlo a
'
'
UserForm1.Show
End Sub


Sub CreaMes()
'
' CreaMes Macro
' Acceso directo: N/A
' Macro grabada el 18/07/2005 por Gabriel Diaz
' cualquier comentario favor de dirigirlo a
'
'

'esta parte oculta al usuario lo que hace la macro
Application.ScreenUpdating = False

'esta parte desprotege al libro
ActiveWorkbook.Unprotect
'esta parte agrega una hoja nueva al libro
Sheets.Add
ActiveSheet.Name = "mes_new"
'esta parte hace visible la hoja fuente llamada "mes_bco" y
'copia la informacion a la hoja nueva llamada "mes_new"
Sheets("mes_bco").Visible = 1
Sheets("mes_bco").Select
ActiveSheet.Unprotect
Cells.Select
Selection.Copy
Sheets("mes_new").Select
ActiveSheet.Paste
'esta parte da el formato adecuado a la hoja nueva
Range("A1:R1").Select
ActiveWindow.Zoom = True
Range("C11").Select
ActiveWindow.FreezePanes = True
Application.CutCopyMode = False
With ActiveSheet.PageSetup
.PrintTitleRows = "$9:$10"
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.393700787401575)
.RightMargin = Application.InchesToPoints(0.393700787401575)
.TopMargin = Application.InchesToPoints(0.393700787401575)
.BottomMargin = Application.InchesToPoints(0.393700787401575)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperLetter
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 4
.PrintErrors = xlPrintErrorsDisplayed
End With
'esta parte le pone el nombre a la hoja que el usuario definio
Sheets("mes_new").Select
' Sheets("mes_new").Name = UserForm1.Text1.Text

'esto fue ayuda de KL de grupos de discusion de excel
'On Error Resume Next
' Set ws = Sheets(UserForm1.Text1.Text)
' On Error GoTo 0
' If ws Is Nothing Then
' Sheets("mes_new").Name = UserForm1.Text1.Text
' Else
' MsgBox "Ese nombre ya existe, cambialo."
' UserForm2.Show
' End If

'esta parte inserta la seguridad al libro, a la hoja y esconde la hoja fuente
Range("A11").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheets("mes_bco").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheets("mes_bco").Visible = 0
ActiveWorkbook.Protect Structure:=True, Windows:=False

'esta parte desoculta al usuario lo que hace la macro
Application.ScreenUpdating = True

End Sub

Sub Cambia_Nombre()
'
' Cambia_Nombre Macro
' Acceso directo: N/A
' Macro grabada el 11/10/2005 por Gabriel Díaz
' cualquier comentario favor de dirigirlo a
'
'
'esta parte oculta al usuario lo que hace la macro
Application.ScreenUpdating = False

'esta parte desprotege la hoja y el libro
ActiveSheet.Unprotect
ActiveWorkbook.Unprotect

'esta parte selecciona y cambia de nombre al libro
Sheets("mes_new").Select
On Error Resume Next
Set ws2 = Sheets(UserForm2.Text2.Text)
On Error GoTo 0
If ws2 Is Nothing Then
Sheets("mes_new").Name = UserForm2.Text2.Text
Else
MsgBox "Ese nombre ya existe, cambialo."
UserForm2.Show
End If
ActiveWorkbook.Protect Structure:=True, Windows:=False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

'esta parte desoculta al usuario lo que hace la macro
Application.ScreenUpdating = True

End Sub


Sub Nuevo_año()
'
' Nuevo_año Macro
' Acceso directo: CTRL+g
' Macro grabada el 27/09/2005 por Gabriel Díaz
' cualquier comentario favor de dirigirlo a
'
'
Workbooks.Add Template:="C:\Gasolinera\RegistroGas_bco.xls"
End Sub


"gdiaz" escribió:

Muy bien KL, solo que ahi se detiene la macro, no hay alguna opcion para que
capture el error, pida un nuevo nombre y siga con la macro?

"KL" escribió:

> Hola gdiaz,
>
> Que tal esto:
>
> On Error Resume Next
> Set ws=Sheets(UserForm1.Text1.Text)
> On Error GoTo 0
> If ws Is Nothing Then
> Sheets("mes_new").Name = UserForm1.Text1.Text
> Else
> MsgBox "Aqui va tu mensaje"
> End If
>
> Saludos,
> KL
>
>
> "gdiaz" wrote in message
> news:
> > Manuel, te voy a poner parte del codigo para que veas como tengo el
> > problema:
> > primero cree un user form para capturar el nombre que quiere el usuario,
> > al
> > que llame "userform1", el cuadro de texto retiene la informacion.
> > luego creo la nueva hoja y le doy todos los formatos que necesita la hoja
> > y
> > al final le cambio el nombre "mes_new" al nombre del usuario asi:
> >
> > 'esta parte le pone el nombre a la hoja que el usuario definio
> > Sheets("mes_new").Select
> > Sheets("mes_new").Name = UserForm1.Text1.Text
> >
> > pero si el usuario repite un nombre que ya existe truena la macro y deja
> > todo sin terminar.
> > lo que tu me dices es un loop, pero no estaria haciendo lo mismo? ademas
> > de
> > que no esta en vba, no? ya que hice una prueba y me marca procedimiento
> > interno no valido en el do
> >
> >
> > "Manuel Romero" escribio:
> >
> >> dim nombre as string
> >> dim wb as sheet
> >>
> >> do
> >> nombre=inputbox("deme un nombre:")
> >> set wb=activeworkbook.sheets(nombre)
> >> loop until wb is nothing
> >>
> >> > hola, tengo el siguiente problema:
> >> > tengo una macro que pide se capture un el nombre para una hoja nueva,
> >> > que
> >> > puedo hacer si el usuario captura un nombre que ya existe, para que la
> >> > macro
> >> > no truene y le vuelva a pedir otro nombre?
> >>
> >>
> >>
>
>
>
Respuesta Responder a este mensaje
#5 gdiaz
11/10/2005 - 22:21 | Informe spam
manuel, la verdad no le entiendo, o no lo meti donde debia, en mi respuesta
anterior meti el codigo completo de la macro "crea_mes" casi hasta abajo
esta, lo podrias revisar por favor?

muchas gracias (a los dos KL y Manuel Romero)

"Manuel Romero" escribió:

dim nombre as string
dim wb as sheet

on error resume next
do
userform1.show vbmodal
set wb=activeworkbook.sheets(userform1.text1.text)
userform1.text1.text=""
loop until wb is nothing
userform1.hide
on error goto 0

Perdona gdiaz, se me paso escribir el on error.

Porque dices que no es VBA?

> Muy bien KL, solo que ahi se detiene la macro, no hay alguna opcion para que
> capture el error, pida un nuevo nombre y siga con la macro?
>
> "KL" escribió:
>
>> Hola gdiaz,
>>
>> Que tal esto:
>>
>> On Error Resume Next
>> Set ws=Sheets(UserForm1.Text1.Text)
>> On Error GoTo 0
>> If ws Is Nothing Then
>> Sheets("mes_new").Name = UserForm1.Text1.Text
>> Else
>> MsgBox "Aqui va tu mensaje"
>> End If
>>
>> Saludos,
>> KL
>>
>>
>> "gdiaz" wrote in message
>> news:
>>> Manuel, te voy a poner parte del codigo para que veas como tengo el
>>> problema:
>>> primero cree un user form para capturar el nombre que quiere el usuario,
>>> al
>>> que llame "userform1", el cuadro de texto retiene la informacion.
>>> luego creo la nueva hoja y le doy todos los formatos que necesita la hoja
>>> y
>>> al final le cambio el nombre "mes_new" al nombre del usuario asi:
>>>
>>> 'esta parte le pone el nombre a la hoja que el usuario definio
>>> Sheets("mes_new").Select
>>> Sheets("mes_new").Name = UserForm1.Text1.Text
>>>
>>> pero si el usuario repite un nombre que ya existe truena la macro y deja
>>> todo sin terminar.
>>> lo que tu me dices es un loop, pero no estaria haciendo lo mismo? ademas
>>> de
>>> que no esta en vba, no? ya que hice una prueba y me marca procedimiento
>>> interno no valido en el do
>>>
>>>
>>> "Manuel Romero" escribio:
>>>
>>>> dim nombre as string
>>>> dim wb as sheet
>>>>
>>>> do
>>>> nombre=inputbox("deme un nombre:")
>>>> set wb=activeworkbook.sheets(nombre)
>>>> loop until wb is nothing
>>>>
>>>>> hola, tengo el siguiente problema:
>>>>> tengo una macro que pide se capture un el nombre para una hoja nueva,
>>>>> que
>>>>> puedo hacer si el usuario captura un nombre que ya existe, para que la
>>>>> macro
>>>>> no truene y le vuelva a pedir otro nombre?
>>>>
>>>>
>>>>
>>
>>
>>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida