Insertar imagen debajo de la ultima fila utilizada con VBA

Necesito insertar una imagen debajo de la ultima fila utilizada en una hoja de Excel, tengo ya la macro que la inserta, pero los parámetros que utilizo son TOP y LEFT

No se cual es la relación que existe entre TOP y la ultima fila utilizada, se como encontrar la ultima fila utilizada pero no la relación que existe entre TOP y la ultima fila, ¿y la columna y Left como puedo saberla? Espero que me puedan ayudar

Les escribo la macro

Dim L1 as Workbook
Dim hlc as Worksheet
Dim imlogo As Object
Set L1 = ThisWorkbook
Set hlc = L1.Worksheets("HLC")
Set imlogo = .Pictures.Insert(La hoja y fila etc)
ultR = hlc.Cells(Rows.Count,1).End(xlUp).Row
With imlogo
.Name = "imlogo"
.Top =310
.Left 580
End with
Respuesta
2

Para entender o asimilar una función, en ocasiones es preciso separar la instrucción en cuestión, y hacer pruebas de manera independiente.

Por ejemplo:

Sub Manejo_Top()
    For i = 1 To 5
        arriba = Range("A" & i).Top
        MsgBox "El top de la fila " & i & " es " & arriba
    Next
End Sub

Si ejecutas la macro, observarás que la fila 1 o la celda A1 su top es 0, eso significa que el Top de la fila 1 es el inicio, por así decirlo, de la hoja.

Luego, si las filas tienen un alto de 15 puntos, el topo de la fila 2 será de 15.

.

Ahora, si haces lo mismo, pero para conocer el Left de las columnas.

Sub Manejo_Left()
    For j = 1 To 5
        izquierda = Cells(1, j).Left
        MsgBox "El left de la columna " & j & " es " & izquierda
    Next
End Sub

Si ejecutas la macro de mostrará que la izquierda de la columna 1 es 0. La izquierda de la columna 2 es 60, etc.


Entonces si tu imagen lo pones con referencia a una celda, estará tomando esas coordenadas.

Por ejemplo si la última fila con datos es la fila 5, entonces quedaría  :

ufila = 5

imagen.top = range("A" & ufila).top

Entonces estás diciendo que el objeto (imagen) estará a una altura de 60 puntos desde el inicio de la hoja.

Lo mismo para la izquierda, por ejemplo

imagen.left = 580

Estás indicando que el objeto (imagen) estará a 580 puntos desde el margen izquierdo de la hoja.

También puede interesarte la relación de puntos y pixeles:

http://excelforo.blogspot.mx/2014/09/unidades-de-medida-para-excel.html 

sal u dos

3 respuestas más de otros expertos

Respuesta
2

Tanto "Top" como "Left" son propiedades de los objetos de, en este caso, Excel. Top devuelve un valor que representa la distancia, en puntos, desde el borde superior de la fila 1 hasta el borde superior del objeto. En el caso de "Left" devuelve un valor que representa la distancia, en puntos, desde el borde izquierdo de la columna A hasta el borde izquierdo del objeto. No hay relación de dichas propiedades con la última fila llena de una hoja.

Asimismo, tienes algunos errores de concepto en tu propuesta de macro.

Mira:

Sub InsertarImagen()
Dim Imagen As Object
Dim ListadeImagenes As String
Dim Arriba As Double, Izquierda As Double
Set Imagen = Sheets("Hoja3").Pictures.Insert(ThisWorkbook.Path & "\MiImagen.jpg")
With Range("B10:D15")
Arriba = .Top
Izquierda = .Left
End With
With Imagen
.ShapeRange.LockAspectRatio = False
.Top = Arriba
.Left = Izquierda
.Width = 200
.Height = 100
End With
Set Imagen = Nothing
End Sub

Esa macro inserta una imagen le da un ancho de 200 (Width) un alto de 100 (Height) y coloca que su  límite superior (Top) es equivalente al borde superior del rango "B10:D15" y que su borde izquierdo (Left) es equivalente al borde izquierdo del rango mencionado.

Para que el borde superior de la imagen sea equivalente al de la última fila, solo debes hallar dicha fila y colocar el "top" de la imagen como el "top" de una celda de dicha fila

Respuesta
1

Las instrucciones son estas en la definición de la variable ultr cambie .row por .address esto indicara la celda como $A$1, $A$2, etc, con esta referencia buscamos la altura y la distancia con las propiedades Range(ultr). Top y range(ultr). Left y hay tienes la relación que existe entre top y la ultima fila.

Dim L1 As Workbook
Dim hlc As Worksheet
Dim imlogo As Object
Set L1 = ThisWorkbook
Set hlc = L1.Worksheets("HLC")
Set imlogo = .Pictures.Insert(La hoja y fila etc)
ultr = hlc.Cells(Rows.Count, 1).End(xlUp).Address
y = Range(ultr).Top
x=range(ultr).left
With imlogo
.Name = "imlogo"
.Top = y
.Left = 580
End With
End Sub
Respuesta
1

Esto te puede aportar algo más

https://youtu.be/TromRjthA_0

La pregunta no admite más respuestas

Más respuestas relacionadas