Error 91 en tiempo de ejecución: Variable de objeto o bloque With no establecido

9 envíos / 0 nuevos
Último envío
Cron
Imagen de Cron
Offline
última acción: Hace 1 hora 13 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 8180
Error 91 en tiempo de ejecución: Variable de objeto o bloque With no establecido

Hola

 

Me ocurre este error, pero no sé por qué.

He buscado en bibliografía de Excel y de Microsoft, pero parece ser que el error es bastante genérico, es decir, que ocurre en multitud de líneas de código diferentes y por causas aparentemente diferentes.

 

En mi caso tengo este código que sirve para localizar el valor mínimo en un rango que defino dinámicamente:

 

    rango = Sheets("Datos").Range("h3:m" & UltimaFila)

    minimoY = WorksheetFunction.RoundDown(WorksheetFunction.Min(rango), 0)

    maximoY = WorksheetFunction.RoundUp(WorksheetFunction.Max(rango), 0)

 
El error lo da al ejecutar la asignación del valor a "rango"
 
Esta variable la tengo inicializada como
Dim rango as range
 
Al ver el error supuse que el dato que asignaba no era de tipo "range", por lo que eliminé la inicialización de la variable para que al usarla, Excel la tomara como variant
 
Seguía dando el error.
 
Curiosamente, cuando escribo lo siguiente el error desaparece:
 
    minimoY = WorksheetFunction.RoundDown(WorksheetFunction.Min( Sheets("Datos").Range("h3:m" & UltimaFila) ), 0)
 
por lo que el error no está en la formulación, sino en la asignación de la variable.
 
 
¿Cómo debería hacerlo para que funcionara?
 
 
Muchas gracias ;)
pacomegia
Imagen de pacomegia
Offline
última acción: Hace 12 horas 12 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 7170
Re: Error 91 en tiempo de ejecución: Variable de objeto o ...

Como se trata de una variable de objeto, para establecer su valor hay que emplear la instrucción Set, no basta sólo con el signo igual

prueba a poner

Set rango = Sheets("Datos").Range("h3:m" & Ultimafila)

 

Data Tools Suite
datos y tablas con Excel

Cron
Imagen de Cron
Offline
última acción: Hace 1 hora 13 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 8180
Re: Error 91 en tiempo de ejecución: Variable de objeto o ...

Ok, muchas gracias. Pensaba que "Set" se podía obviar en todos los casos.

 

Un saludo

Mario (no verificado)
Imagen de Mario
Error 91 en tiempo de ejecución: Variable de objeto o bloque Wit

En mi caso me aparece de esta forma, Por donde recomendáis tirar? Vamos cómo lo arrerglo??

Gracias:

Public Sub Auto_Open()

Dim oMenuBar As CommandBar

Dim oSubMenu As CommandBarPopup

Dim oNewMenu As CommandBarControl

Dim oSaveAsMenu As CommandBarControl

Dim SaveAsPosition As Integer

 

' Specify the CommandBar to add to. In this example, the New Menu

' item is added to the Word for Windows default File menu.

Set oMenuBar = CommandBars.Item("File")

 

' Find the position for the Send To menu

For I = 1 To oMenuBar.Controls.Count

   If oMenuBar.Controls(I).Caption = "Sen&d To" Then

      Set oSubMenu = oMenuBar.Controls(I)

      Exit For

   End If

Next I

 

Set oMenuBar = oSubMenu.CommandBar

 

' Check whether there is a "Elite Document Manager" item

For I = oMenuBar.Controls.Count To 1 Step -1

    If oMenuBar.Controls(I).Caption = "Elite Document Manager" Then

        oMenuBar.Controls(I).Delete

    End If

Next I

    

 

' Create New Menu object and add it to the built-in Menu Bar.

Set oNewMenu = oMenuBar.Controls.Add(msoControlButton, _

   , , oMenuBar.Controls.Count + 1)

 

With oNewMenu

   .Enabled = True

   

   ' Give the menu item some display text.

   .Caption = "Elite Document Manager"

   ' Specify macro to run when user clicks the menu item.

   .OnAction = "SendToEliteDocumentManager"

 

 

David
Imagen de David
Offline
última acción: Hace 4 años 9 meses
alta: 14/10/2012 - 11:39
Puntos: 40
Error 91 al usar xlByColumns

Buenos días:

Yo tengo el mismo problema con el error 91, y no entiendo de donde puede venir, mi caso es el siguiente. Estoy creando una macro que lo que hace es buscar distintos fallos en una máquina, en el programa inicial se usaba la siguiente función de búsqueda:

Sheets(1).Cells.Find(What:=codigofallo, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate

Con SearchOrder:=xlByRows, para disminuir tiempo de ejecución del programa se me ocurrió, dada la disposición de los datos, usar SearchOrder:=xlByColumns, pero al hacerlo me sale ese error, cuando antes el programa funcionaba sin ningún problema. La función en el segundo caso es la siguiente:

Sheets(1).Cells.Find(What:=codigofallo, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate

En ambas funciones codigofallo esta definido como un String siendo introducido en las variables de una función:

Function Buscafallos(ByVal nfallo As Integer, ByVal nfila As Integer, ByVal AGVant As Integer, ByVal AGVpos As Integer, ByVal nombrefallo As String, ByVal codigofallo As String, ByVal temacolor As Variant) As Variant

Si alguien pudiese ayudarme, estaría muy agradecido.

Un saludo,

David.

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 12 horas 12 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 7170
ese error también lo puede

ese error también lo puede dar si no encuentra el texto qeu estás buscando,

Lo que intentas hacer es activar la celda que coincida con tu búsqueda, pero si no encuentra ninguna coincidencia no hay nada qeu poder activar y salta el error 91  objeto no establecido, no hay ninguna celda establecida para activar

Lo más facil será que añadas un control de errores para interceptar este error cuando se produzca si no hay coincidencias.

 

Data Tools Suite
datos y tablas con Excel

David P (no verificado)
Imagen de Mario
Error 91 al usar xlByColumns

En primer lugar gracias por tu interés, pero creo que del caso del que me estas hablando estoy protegido, el código de mi control es el siguiente:

Set nohayfallo = Sheets(1).Cells.Find(What:=codigofallo, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
    
If Not (nohayfallo Is Nothing) Then

Estando el buscador que te he copiado antes dentro del If. Si ves que esa medida de protección no es suficiente te agradecería que me lo hicieras saber.

A parte, al probar lo que me has dicho me he dado cuenta de un fenómeno que me parece curioso, al poner en el control que te acabo de escribir la condición "SearchOrder:=xlByColumns", no me encuentra ningún error, a lo que intuyo que no entra en el If. Es decir que al usar el "SearchOrder:=xlByColumns" en este caso, en vez de dar el error 91 como cuando lo usamos en el buscador de errores, simplemente da el valor "Nothing".

La verdad que este caso me tiene totalmente despistado, estaré atento por si se te ocurre alguna posible razón más.

Muchas gracias y un saludo,

David.

monnquechu (no verificado)
Imagen de Mario
Duda

En ese caso de que salte el error 91 por no encontrar ninguna coincidencia, como se soluciona, llevo un par de dias con ese problema

gracias de antemano

Vyrtim
Imagen de Vyrtim
Offline
última acción: Hace 2 días 9 horas
alta: 13/07/2016 - 09:18
Puntos: 170
Como ha dicho pacomegia

Como ha dicho pacomegia anteriormente, lo más fácil en ese caso es usar el control de errores. Tienes dos opciones:

1.- Continuar con la ejecución del código como si no hubiera pasado nada:

On Error Resume Next

Range(rango).Find(...)

[...]

 

2.- Establecer una rutina específica para tratar el error

On Error GoTo gestiona_error

Range(rango).Find(...)

[...]

[...]

gestiona_error:

If Err.Number = 91 then

       [...]

       Resume Next (o Resume + nombre de linea donde quieres que continue la ejecución)

End if