Code chèn ảnh vào vừa trong 1 ô Excel

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Em chào anh chị ạ, em có tham khảo trên mạng được code chèn ảnh vào trong ô Excel, em nhờ anh chị chỉnh giúp em một vài chỗ ạ.

Sub insertPhotoMacro()
Dim photoNameAndPath As Variant
Dim photo As Picture
photoNameAndPath = Application.GetOpenFilename(Title:="Select Photo to Insert")
If photoNameAndPath = False Then Exit Sub
Set photo = ActiveSheet.Pictures.Insert(photoNameAndPath)
With photo
.Left = ActiveSheet.Range("A1").Left
.Top = ActiveSheet.Range("A1").Top
.Width = ActiveSheet.Range("A1").Width
.Height = ActiveSheet.Range("A1").Height
.Placement = 1
End With
End Sub

E muốn khi chèn vào thì nó tự động căn giữa ô, và nó sẽ vừa trọn vào ô giống như hình ạ (Đối với hình dọc thì nó chèn vừa chiều cao của ô Excel, còn nếu hình ngang thì nó chèn vừa chiều rộng của ô Excel)

2986

Em xin cám ơn anh chị rất nhiều ạ!

E muốn khi chèn vào thì nó tự động căn giữa ô, và nó sẽ vừa trọn vào ô giống như hình ạ (Đối với hình dọc thì nó chèn vừa chiều cao của ô Excel, còn nếu hình ngang thì nó chèn vừa chiều rộng của ô Excel)

Đoạn màu đỏ sẽ mâu thuẫn với đoạn màu xanh.

Dạ ý em là trọn 1 ô có thể theo chiều dọc hoặc chiều ngang mà kích thước nó không vượt ra khỏi ô ạ. Em gặp vấn đề ở đây là:
Khi em chèn vào ô nó sẽ sảy ra 2 trường hợp: Một là nó quá cao so với ô (với hình dọc), hai là nó quá dài so với chiều rộng ạ.
Em muốn khi chèn vào nó giống như hình mà em mô tả ở 2 trường hợp đó anh!
Cám ơn anh đã quan tâm!

Ví dụ có một hình ngang như thế này,như code trên khi em chèn vào anh thấy nó vượt ra khỏi ô A1
2987

Vụ này có nhiều bài lắm rồi và mình cũng đưa code lên nhiều lần rồi.

Đây chỉ là kỹ thuật dàn trang, so sánh 2 tỉ lệ cao/rộng của khung chứa và của vật cần đặt vào khung. Lấy giấy bút ra giải toán một tẹo là xong, rồi đưa vào code thôi.

Dạ cám ơn anh, vậy anh cho em hỏi code gì để đặt nó căn giữa trên-dưới và giữa trái-phải của ô ạ?

giữa trên-dưới

Đặt theo Top: Giải bài toán dịch chuyển đường tâm của vật trùng tâm của khung hình = 1/2 cao khung – 1/2 cao vật

giữa trái-phải

Đặt theo Left: làm như tương tự như trên.

Chỉ là một chút xíu hình học thôi mà.

Thử tham khảo xem file này ( của 1 anh thành viên của diễn đàn này (không nhớ tên- Hình như là Anh Ndu thì phải)

www.giaiphapexcel.com/diendan/threads/code-ch%C3%A8n-%E1%BA%A3nh-v%C3%A0o-v%E1%BB%ABa-trong-1-%C3%B4-excel.163937/#post-1094023

Khóa học Power PI – Ứng dung trong Nhân sự
Khóa học SprinGO phù hợp

Khóa học Power PI – Ứng dung trong Nhân sự

TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...

Xem khóa học
★★★★★ 5 ★ 1 👤 1 ▥ 0
Quảng cáo

Bạn nên đọc

One Response

  1. hands says:

    Code này là của anh Batman1. Bạn đọc kỹ rồi dùng nhé!

    '    Sub InsertPicture dung de chen anh. Khi can chen anh trong bat cu tap tin Excel nao thi can chen toan bo code cua Sub InsertPicture vao tap tin do.
    '    Cach su dung Sub InsertPicture y nhu trong code cua sheet DATA.
    Sub InsertPicture(ByVal PicFilename As String, Optional Target As Range = Nothing, _
                    Optional original As Boolean = False, Optional center As Boolean = False, _
                    Optional LinkToFile As Boolean = False)
    '    Target: vung nhap anh. Co the la nhieu cell
    '    Neu Target = Nothing thi Target = ActiveCell
    '    Neu original = True thi nhap anh kich thuoc thuc.
    '    Neu original = FALSE thi neu center = True thi anh se center trong vung Target,
    '    nguoc lai thi se vua khit vung Target
    '    LinkToFile = False thi khong can giu anh tren dia, nguoc lai bat buoc phai giu anh de moi lan mo thi co
    Dim w As Double, h As Double, shp As Shape, fso As Object
        If Target Is Nothing Then Set Target = ActiveCell
        On Error Resume Next
        Target.Parent.Shapes(Target.Address).Delete
        On Error GoTo 0
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    If fso.FileExists(PicFilename) Then
            If LinkToFile Then
                Set shp = Target.Parent.Shapes.AddPicture(PicFilename, msoTrue, msoFalse, Target.left, Target.top, 0, 0)
            Else
                Set shp = Target.Parent.Shapes.AddPicture(PicFilename, msoFalse, msoTrue, Target.left, Target.top, 0, 0)
            End If
            If Not shp Is Nothing Then
                With shp
                    If original Then
                        .ScaleWidth 1, msoTrue
                        .ScaleHeight 1, msoTrue
                    ElseIf center Then
                        .ScaleWidth 1, msoTrue
                        .ScaleHeight 1, msoTrue
                        w = Target.Width
                        h = w * .Height / .Width
                        If h > Target.Height Then
                            h = Target.Height
                            w = h * .Width / .Height
                        End If
                        .left = Target.left + (Target.Width - w) / 2
                        .top = Target.top + (Target.Height - h) / 2
                        .Width = w
                        .Height = h
                    Else
                        .Width = Target.Width
                        .Height = Target.Height
                    End If
                    shp.Name = Target.Address
                    shp.Placement = xlMoveAndSize
                End With
            End If
        End If
    
    Set fso = Nothing
     End Sub

    Ví dụ gọi sub để chèn ảnh có tên là Box.jpg trong thư mục D:Pics (đáp ứng yêu cầu của bạn) như sau:
    InsertPicture "D:PicsBox.jpg", Nothing, , True

    (Lưu ý: dùng tham số True)

    Dạ em cám ơn anh rất nhiều! Chúc anh nhiều vui trong cuộc sống ạ!

    Ai lại làm thế kia, hình méo mất, xấu òm.

    Người ta lock ratio lại. Sau khi đối chiếu tỉ lệ hai cạnh của 2 đối tượng thì chỉ cần thay đổi 1 trong 2 cạnh thôi.

    thử file này đi bạn. của bác gì đấy sau đó bác hoangtuan868 sửa lại chỉnh được nhiều ảnh cùng lúc

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm