Error al insertar imagen por código en Excel 2007

20/10/2008 - 18:55 por Emilio | Informe spam
Hola!
hace unos días preparé el siguiente procedimiento que en excel 2003 funciona
perfectamente, sin embargo en excel 2007 no, a pesar de que en algún momento
lo ha hecho y ningún cambio ha sido sustancial como para ello, el error es
"No se puede obtener la propiedad Insert de la clase Pictures." y se produce
en la linea marcada con <<<<<<, es decir en el momento de insertar la
imagen.

Le he dado mil vueltas pero ya no sé por donde mas mirar, ¿alguna idea?

Muchas gracias.

'*******************************************************************************
'* InsertaImagen
'* inserta una imagen en una hoja excel, posicionandola sobre la hoja/celda
'* indicadas, eliminando previamente uno ya existente del mismo nombre si se
'* llega a pasar el nombre
'* Argumentos: strRutaImagen => ruta completa del archivo de imagen a
insertar
'* strCelda => Celda en que posicionarla
'* strHoja => (opcional) hoja en que insertarla
'* intAnchomm => (opcional) ancho en milimetros (la altura
será
'* proporcional a anchura)
'* strNombre => (opcional) nombre del gráfico
'* uso: InsertaImagen "C:\temp\prueba.png" , "E20",,100, "Grafico1"
'* Si utilizas este código, respeta la autoría y los créditos
'* ESH 17/10/08 18:36
'*******************************************************************************

Public Sub InsertaImagen(strRutaImagen As String, strCelda As String,
Optional strHoja As String, Optional intAnchomm As Integer, Optional
strNombre As String)
Dim strHojaActiva As String, _
Imagen As Object

Const Punto = 0.35278 ' 1 punto es equivalente a 0.35 mm

On Error GoTo InsertaImagen_TratamientoErrores

Application.ScreenUpdating = False

strHojaActiva = ActiveSheet.Name
' si no se ha pasado nombre de hoja, tomo la activa por defecto
If SiEsNulo(strHoja, "") = "" Then
strHoja = ActiveSheet.Name
Else
Worksheets(strHoja).Activate
End If
' elimino la imagen si es que existe
If Not SiEsNulo(strNombre, "") = "" Then
For Each Imagen In ActiveSheet.Pictures
If Imagen.Name = strNombre Then Imagen.Delete
Next Imagen
Else
strNombre = "Grafico"
End If

' inserto la imagen
ActiveSheet.Pictures.Insert(strRutaImagen).Name = strNombre ' <<<<<<<<<<
ActiveSheet.Pictures(strNombre).Select
' bloqueo la relación de aspecto
Selection.ShapeRange.LockAspectRatio = True
' si se ha pasado ancho lo aplico, sino, mantengo el original
If Not SiEsNulo(intAnchomm, 0) = 0 Then
Selection.ShapeRange.Width = intAnchomm / Punto
End If
' posiciono la imagen en la celda
With Worksheets(strHoja).Range(strCelda)
Selection.ShapeRange.Left = .Left
Selection.ShapeRange.Top = .Top
End With
' activo la hoja que estaba activa al iniciar el proceso
Worksheets(strHojaActiva).Activate


InsertaImagen_Salir:
Set Imagen = Nothing
Application.ScreenUpdating = True
On Error GoTo 0
Exit Sub

InsertaImagen_TratamientoErrores:
MsgBox "Error " & Err & " en proc.: InsertaImagen de Módulo: Módulo1 (" &
Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume InsertaImagen_Salir

End Sub ' InsertaImagen


'***********************************************************************************
'* Emula la función Nz de Access, es decir devuelve el valor pasado como
parámetro o
'* si se le pasa un argumento opcional, ese valor o en su defecto 0
'* Argumentos: vntValor => dato a comprobar
'* vntDevuelve => valor a devolver si el dato es nulo
'* uso: SiEsNulo(vntValor, True) devuelve True si vntValor es nulo o ""
'* SiEsNulo(vntValor) devuelve 0 si vntValor es nulo o ""
'* SiEsNulo(vntValor, "Null") devuelve Nulo si vntValor es nulo o ""
'* ESH 09/10/03 20:15
'* Si utilizas este código, respeta la autoría y los créditos
'*******************************************************************************

Public Function SiEsNulo(vntValor As Variant, Optional vntDevuelve As
Variant) As Variant

If IsMissing(vntDevuelve) Then vntDevuelve = 0

If IsNull(vntValor) Or vntValor = "" Then
SiEsNulo = vntDevuelve
Else
SiEsNulo = vntValor
End If

End Function ' SiEsNulo

Saludos a tod@s
Emilio [MS-MVP Access 2006/8]
miliuco56 ALGARROBA hotmail.com
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio

Preguntas similare

Leer las respuestas

#6 Héctor Miguel
22/10/2008 - 03:37 | Informe spam
hola, Emilio !

pues va a ser que no :-S
Despues de reparar Office, mas de un cuarto de hora se ha llevado para ello, sigue fallando exactamente igual
el mismo error (1004: "No se puede obtener la propiedad Insert de la clase Pictures."), en un libro nuevo
incluso con solo una sentencia como esta: ActiveSheet.Pictures.Insert("C:\temp\prueba.png")
Es realmente extraño :-S



op1: existe una limitante (o bug, no lo se) en la version 2007 para insertar images (pero solo) desde paginas web
op2: no se si quepa la posibilidad de algun "error tipografico" que resulte en un nombre de archivo "inexistente"
(p.e. algunos archivos JPG llevan la extension *.JPG y otros llevan *.JPEG)
op3: que la macro se ejecute desde un boton (cuadro de controles) con la propiedad TakeFocusOnClick en True
op4: que no este registrado el filtro grafico para el tipo de imagen que se quiere insertar

podria suponer mas causales (pero que si resulta algo que no me hubiera imaginado ?)

comentas (si detectas) algun detalle mas significativo ?
saludos,
hector.
Respuesta Responder a este mensaje
#7 Emilio
22/10/2008 - 08:45 | Informe spam
Gracias Hector Miguel

op1: existe una limitante (o bug, no lo se) en la version 2007 para
insertar images (pero solo) desde paginas web


no, no es el caso, de momento todas las pruebas las he realizado en local
op2: no se si quepa la posibilidad de algun "error tipografico" que resulte
en un nombre de archivo "inexistente"


(p.e. algunos archivos JPG llevan la extension *.JPG y otros llevan
*.JPEG)
la mayoría de pruebas las hice con png, aunque he probado tambien con otros
tipos
op3: que la macro se ejecute desde un boton (cuadro de controles) con la
propiedad TakeFocusOnClick en True


siempre he hecho las pruebas directamente desde la ventana inmediato del
editor de VBA
op4: que no este registrado el filtro grafico para el tipo de imagen que se
quiere insertar


como te decía antes he probado con varios tipos, al margen de que durante un
tiempo funcionó

Por supuesto que si llego a resolverlo te lo hare saber, te reitero mi
agradecimiento .-))

Saludos a
Emilio [MS-MVP Access 2006/8]
miliuco56 ALGARROBA hotmail.com
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio


"Héctor Miguel" escribió en el mensaje
news:O3xuCb%
hola, Emilio !

pues va a ser que no :-S
Despues de reparar Office, mas de un cuarto de hora se ha llevado para
ello, sigue fallando exactamente igual
el mismo error (1004: "No se puede obtener la propiedad Insert de la
clase Pictures."), en un libro nuevo
incluso con solo una sentencia como esta:
ActiveSheet.Pictures.Insert("C:\temp\prueba.png")
Es realmente extraño :-S



op1: existe una limitante (o bug, no lo se) en la version 2007 para
insertar images (pero solo) desde paginas web
op2: no se si quepa la posibilidad de algun "error tipografico" que
resulte en un nombre de archivo "inexistente"
(p.e. algunos archivos JPG llevan la extension *.JPG y otros llevan
*.JPEG)
op3: que la macro se ejecute desde un boton (cuadro de controles) con la
propiedad TakeFocusOnClick en True
op4: que no este registrado el filtro grafico para el tipo de imagen que
se quiere insertar

podria suponer mas causales (pero que si resulta algo que no me hubiera
imaginado ?)

comentas (si detectas) algun detalle mas significativo ?
saludos,
hector.

Respuesta Responder a este mensaje
#8 KL
02/11/2008 - 16:09 | Informe spam
Hola Emilio,

He estado haciendo pruebas con tu codigo, y no soy capaz de reproducr el
problema. Me funciona correctamente en Windows Vista Ultimate 64-bit Eng,
Office 2007 Ultimate Eng.

Saludos,
KL
Respuesta Responder a este mensaje
#9 Emilio
02/11/2008 - 17:33 | Informe spam
Muchas gracias KL :-))

está claro que es algo de mi máquina :-((

Saludos a desde Huelva

Emilio [MS-MVP Access 2006/8]
miliuco56 ALGARROBA hotmail.com
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio
"KL" escribió en el mensaje de noticias
news:
Hola Emilio,

He estado haciendo pruebas con tu codigo, y no soy capaz de reproducr el
problema. Me funciona correctamente en Windows Vista Ultimate 64-bit Eng,
Office 2007 Ultimate Eng.

Saludos,
KL

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida