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 ;)
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.
Ok, muchas gracias. Pensaba que "Set" se podía obviar en todos los casos.
Un saludo
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"
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.
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.
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.
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
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
[comentario movido a tema nuevo en el foro http://www.necesitomas.com/consulta-error-91-exportar-excel-word]
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
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)
[comentario movido a tema nuevo en el foro: https://www.necesitomas.com/consulta-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
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