Error '9' en tiempo al abrir desde el fichero guardado.

helpdeskes

New Member
Joined
Feb 8, 2007
Messages
11
Hola a todos, Necesito que alguién me pueda orientar en una macro que tengo creada tipo Auto Open, que es la siguiente:

Code:
Sub Auto_open()
'
'Rem No necesario porque ya lo lleva la plantilla
   ' With ActiveWorkbook
   '    .PrecisionAsDisplayed = False
   '     .SaveLinkValues = False
   ' End With
    ' ChDir "C:\Ofertas"
    Workbooks.Open Filename:="C:\Ofertas\Lista Precios.xls", ReadOnly:=True
    Windows("Generador Ofertas1").Activate
    Range("E3").Select
End Sub

El "problema" es que cuando guardo el documento con otro nombre y lo vuelvo abrir me da error de Visual Basic (error '9'.. subindice fuera de intervalo), entiendo que es por la parte de la macro "Windows("Generador Ofertas1).Activate, y mi pregunta es como puedo hacer en la macro, algo tipo variable para que no de el error, y se abra desde el fichero guardado, y no intente abrir "Generador Ofertas1".
Miles de gracias de antemano.
 

Excel Facts

When they said...
When they said you are going to "Excel at life", they meant you "will be doing Excel your whole life".
Prueba esto

Code:
Dim WbkOp as workbook
'// ...
set wbkOp = Workbooks.Open Filename:="C:\Ofertas\Lista Precios.xls", ReadOnly:=True 
wbkOp.Windows("Generador Ofertas1").Activate 
'//...

GALILEOGALI
 
Upvote 0
Hola galileogali

Siento no haber contestado antes, pero he estado unos cuantos días "OUT".

Muchas gracias por tu respuesta. La he probado pero me da errores de compilación y entonces he visto que seguramente no me he explicado bien.

El problema es que cuando se abre el fichero, y se abren automaticamente los otros ficheros, tengo que volver al 1º que he abierto, del cual no se el nombre, por eso se me ocurrio guardarme el nombre del libro en una variable para luego hacer el comando
Windows(variable)Activate.

Es decir más o menos sería
Code:
Dim wbkOp as .....
wbkOp = "Me guardo el nombre del Libro de trabajo actual"
' Abro los otros que necesito
Workbooks.Open Filename:="C:\Ofertas\Lista Precios.xls", ReadOnly:=True
    Workbooks.Open Filename:="C:\Ofertas\Listado BP.xls", ReadOnly:=True
' Vuelvo al libro que me ha ejecutado la macro AutoOpen
Windows(wbkOp).Activate

Ms o menos es es la idea, pero no se como guardarme el nombre del libro de trabajo acutal, antes de abrir los otros.

Saludos
 
Upvote 0
Hola de nuevo galileogali!

Ya está solucionado!!! :)

Después de enviarte la respuesta, se nos iluminó nuevamente la cabeza para nuestra suerte.. os pasamos nuestra solución

Code:
Sub Auto_open()
'
' Macro Para establecer las condiciones de trabajo en el generador de Ofertas
' Macro grabada el 09/02/2007 por HelpDeskEs
'
    Dim WbkOp As String
    ' Guarda el nombre de la hoja actual con la oferta
    WbkOp = ThisWorkbook.Name
    ' Abre Archivos Vinculados
    Workbooks.Open Filename:="C:\Ofertas\Lista Precios.xls", ReadOnly:=True
    Workbooks.Open Filename:="C:\Ofertas\Listado BP.xls", ReadOnly:=True
    ' Activa la Hoja de Oferta
    Windows(WbkOp).Activate
    Range("E3").Select
End Sub
Esperemos que sirva y solucione problemas/dudas a otras personas en estos foros.
Muchas gracias por vuestras indicaciones y por vuestra web que siempre es de gran ayuda, para aclarar dudas/cuestiones/preguntas.
Nuevamente miles de gracias. :wink:
Saludos,
 
Upvote 0
No es necesario guardar el nombre en un variable. Usted ya está en el modulo del cuaderno. Entonces se puede usar ME y la colección de ventana de tal. Aquí hay una solución más amplia.
Code:
Const c_strArchivoPrecios As String = "C:\Ofertas\Lista Precios.xls"
Const c_strArchivoListado As String = "C:\Ofertas\Listado BP.xls"

Private Sub Workbook_Open()
    
    If ArchivoExiste(c_strArchivoPrecios) Then
        If Not AbiertoYa(c_strArchivoPrecios) Then
            Workbooks.Open Filename:=c_strArchivoPrecios, ReadOnly:=True
        End If
    Else
        If vbNo = MsgBox("No se puede encontrar el archivo: " & vbCr & _
                         vbCr & c_strArchivoPrecios & vbCr & _
                         vbCr & "¿Desea seguir?", _
                         vbQuestion + vbYesNo + vbDefaultButton2, _
                         "Archivo Faltante") Then
            Me.Close False
            Exit Sub
        End If
    End If
    
    If ArchivoExiste(c_strArchivoListado) Then
        If Not AbiertoYa(c_strArchivoListado) Then
            Workbooks.Open Filename:=c_strArchivoListado, ReadOnly:=True
        End If
    Else
        If vbNo = MsgBox("No se puede encontrar el archivo: " & vbCr & _
                         vbCr & c_strArchivoListado & vbCr & _
                         vbCr & "¿Desea seguir?", _
                         vbQuestion + vbYesNo + vbDefaultButton2, _
                         "Archivo Faltante") Then
            Me.Close False
            Exit Sub
        End If
    End If
    
    Me.Windows(1).Activate
    Range("E3").Select
End Sub

Private Function AbiertoYa(strFileName As String) As Boolean
    Dim wb As Workbook
    
    On Error Resume Next
    Set wb = Workbooks(FileNameOnly(strFileName))
    AbiertoYa = (Err.Number = 0)
End Function

Private Function ArchivoExiste(strFileName As String) As Boolean
    ArchivoExiste = (Dir(strFileName) <> vbNullString)
End Function

Private Function FileNameOnly(strFullName As String) As String
'   Returns the filename from a path/filename string

    Dim p%
    
    p = InStr(1, strFullName, ".")
    If p = 0 Then
        '// no extension = no file name
        FileNameOnly = vbNullString
        Exit Function
    End If
    
    p = InStrRev(strFullName, Application.PathSeparator)
    FileNameOnly = Right(strFullName, Len(strFullName) - p)
End Function
 
Upvote 0

Forum statistics

Threads
1,215,136
Messages
6,123,246
Members
449,093
Latest member
Vincent Khandagale

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top