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

15 envíos / 0 nuevos
Último envío
Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
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 5 horas 55 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
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)

 

------
Ya sé Excel, pero necesito más.

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
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 11 años 5 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 5 horas 55 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
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.

 

------
Ya sé Excel, pero necesito más.

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 4 años 6 meses
Nivel 1 - 200 puntos
alta: 13/07/2016 - 09:18
Puntos: 270
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

Jalmar (no verificado)
Imagen de Mario
Consulta Error 91

[comentario movido a tema nuevo en el foro http://www.necesitomas.com/consulta-error-91-exportar-excel-word]

 

ELIAS CAÑETE
Imagen de ELIAS CAÑETE
Offline
última acción: Hace 4 años 3 semanas
alta: 21/11/2017 - 17:25
Puntos: 20
tiene razón ...

buen día ... tiene razón y tiene lógica que la rutina se me caiga porque existe la posibilidad que no encuentre el valor buscado .. 

trato de buscar N/A en un conjunto de celdas para luego borrarlo y me da error 91 ... igual ejecuta la rutina pero da el error al final ... sería bueno resolverlo ... le escribo para saludar y poder participar a futuro de su web ... aprecio todos sus comentarios ... saludos

        Cells.Find(What:="N/A", After:=ActiveCell, LookIn:=xlFormulas, LookAt _

        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _

        False, SearchFormat:=False).Activate

        

    Selection.End(xlToLeft).Select

    Selection.End(xlToLeft).Select

    

Set tbl = Selection

tbl.Offset(0, 0).Resize(tbl.Rows.Count, _

 tbl.Columns.Count).Select

 

numRows = Selection.Rows.Count

numColumns = Selection.Columns.Count

Selection.Resize(numRows, numColumns + 14).Select

 

 

 

Cron
Imagen de Cron
Offline
última acción: Hace 8 meses 1 día
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntos
alta: 23/06/2010 - 12:30
Puntos: 12735
En este caso puedes trabajar

En este caso puedes trabajar con un objeto Range. En vez de utilizar "Activate", asigna la búsqueda a este objeto, y luego comprueba si es null. Sería algo así:

Dim celda as range

set celda = Cells.Find(What:="N/A", LookIn:=xlFormulas, LookAt _

        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _

        False, SearchFormat:=False)

if not celda is nothing then

    celda.activate

    Selection.......

.........

    Selection.Resize(numRows, numColumns + 14).Select

end if

 

 

Un saludo

 

P.D. He quitado el After:=Activecell porque puede dar problemas (por ejemplo si buscas en una hoja que no esté activa)

braian Sebastian
Imagen de braian Sebastian
Offline
última acción: Hace 3 años 6 meses
alta: 05/09/2020 - 19:01
Puntos: 35
Consulta error 91

[comentario movido a tema nuevo en el foro: https://www.necesitomas.com/consulta-error-91]

dalvi21 (no verificado)
Imagen de Mario
error 91

 Estoy haciendo esta macros pero me vota el error 91 en tiempo de ejecucion variable de objeto o bloque  with no establecido, que tendria que arreglar para que ya no me bote esos errores. no se mucho del visual solo trataba de hacer una macros para algo rapido.

Sub Ingresos()

'

' Ingresos Macro

'

 

'

    Selection.ListObject.ListRows.Add AlwaysInsert:=True

    Range("A3").Select

    Sheets("MENÚ").Select

    Range("C4").Select

    Selection.Copy

    Sheets("ENTRADA").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Sheets("MENÚ").Select

    Range("C6").Select

    Application.CutCopyMode = False

    Selection.Copy

    Sheets("ENTRADA").Select

    Range("B3").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Sheets("MENÚ").Select

    Range("C8").Select

    Application.CutCopyMode = False

    Selection.Copy

    Sheets("ENTRADA").Select

    Range("C3").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Sheets("MENÚ").Select

    Range("C10").Select

    Application.CutCopyMode = False

    Selection.Copy

    Sheets("ENTRADA").Select

    Range("D3").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Sheets("MENÚ").Select

    Range("F4").Select

    Application.CutCopyMode = False

    Selection.Copy

    Sheets("ENTRADA").Select

    Range("G3").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Sheets("MENÚ").Select

    Range("F6").Select

    Application.CutCopyMode = False

    Selection.Copy

    Sheets("ENTRADA").Select

    Range("E3").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Sheets("MENÚ").Select

    Range("F8").Select

    Application.CutCopyMode = False

    Selection.Copy

    Sheets("ENTRADA").Select

    Range("F3").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Sheets("MENÚ").Select

    Range("F10").Select

    Application.CutCopyMode = False

    Selection.Copy

    Sheets("ENTRADA").Select

    Range("H3").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Sheets("MENÚ").Select

    Application.CutCopyMode = False

    ActiveCell.FormulaR1C1 = ""

    Range("F8").Select

    ActiveCell.FormulaR1C1 = ""

    Range("F6").Select

    ActiveCell.FormulaR1C1 = ""

    Range("F4").Select

    ActiveCell.FormulaR1C1 = ""

    Range("C4").Select

    ActiveCell.FormulaR1C1 = ""

    Range("C6").Select

    ActiveCell.FormulaR1C1 = ""

    Range("C8").Select

    ActiveCell.FormulaR1C1 = ""

    Range("C10").Select

    ActiveCell.FormulaR1C1 = ""

    Range("A1").Select

End Sub

 
mendorob9
Imagen de mendorob9
Offline
última acción: Hace 1 año 1 mes
alta: 13/02/2023 - 20:59
Puntos: 10
error 91

hola Pacomegia que tal! quiero consultarte lo sgte por si puedas darme una mano! me da el mismo error que a todos, al parecer el problema esta al asignar la variable.

Se ha producido el error 91 en tiempo de ejecucion: Variable de objeto o bloque With no establecido

mi codigo es el sgte:

Private Sub btn_actualizar_datos_Click()

Dim fila As Object

Dim linea As Integer

valor_buscado = Me.txt_nro_factura

Set fila = Sheets("Historia").Range("K:K").Find(valor_buscado, Lookat:=xlWhole)

linea = fila.Row

End Sub

 

cuando le doy DEPURAR, me pinta en amarillo  linea = fila.Row

Martin