HÀM LẤY HÌNH ẢNH TỰ ĐỘNG THEO MÃ HÀNG

  • Thread starter Thread starter ntien234
  • Ngày gửi Ngày gửi
Liên hệ QC

ntien234

Thành viên mới
Tham gia
15/6/13
Bài viết
26
Được thích
6
Thân chào cả nhà !
Em có một file exel , thường xuyên phải lấy hình ảnh từ các mã hàng. Nếu chèn ảnh bằng tay rồi kéo chỉnh chắc phải mất tới 2, 3 tiếng đồng hồ mới xong báo cáo.
Em đã dùng hàm Index kết hợp với hàm match để lấy hình ảnh. Nhưng không thể nào cho ra kết quả. Rất mong sự giúp đỡ của các anh chị em trên diễn đàn.
Trên file này em muốn lấy ảnh từ sheet DMVT để hiện ảnh bên sheet Mẫu
 
File làm gì có bạn ơi. Có file thì mọi người mới bắt bệnh được.
 
Thân chào cả nhà !
Em có một file exel , thường xuyên phải lấy hình ảnh từ các mã hàng. Nếu chèn ảnh bằng tay rồi kéo chỉnh chắc phải mất tới 2, 3 tiếng đồng hồ mới xong báo cáo.
Em đã dùng hàm Index kết hợp với hàm match để lấy hình ảnh. Nhưng không thể nào cho ra kết quả. Rất mong sự giúp đỡ của các anh chị em trên diễn đàn.
Trên file này em muốn lấy ảnh từ sheet DMVT để hiện ảnh bên sheet Mẫu
Hàm Index Match không làm việc với hình ảnh nhé
và Xem bài #2 trên để sớm có câu trả lời
 
Tại sao bạn cho là thế?
Con chào Bác Siwtom,
Con cũng đang quan tâm về chủ đề này ạ,
Nếu có thể Bác cùng mọi người xem & giúp con vấn đề bên dưới với ạ.
Cụ thể con để hình ảnh vào các nhóm tên thư mục khác nhau (a,b...), bên ngoài con để tập tin cần tìm kiếm ảnh "File quan ly anh"

1598954493242.png

Trong mỗi thư mục ảnh có các hình ảnh và tên của nó
1598954351422.png

Giờ làm sao để khi nhập các thông tin tên ảnh cột B/ nhóm ảnh cột C thì hình ảnh đó tự điền vào cột D như kết quả minh họa.

1598954576270.png

Con gửi tập tin đính kèm để Bác và mọi người xem giúp ạ.
 

File đính kèm

Con cũng đang quan tâm về chủ đề này ạ,
Nếu có thể Bác cùng mọi người xem & giúp con vấn đề bên dưới với ạ.
Cụ thể con để hình ảnh vào các nhóm tên thư mục khác nhau (a,b...), bên ngoài con để tập tin cần tìm kiếm ảnh "File quan ly anh"
Con gửi tập tin đính kèm để Bác và mọi người xem giúp ạ.
Vấn đề của bạn khác vấn đề của người ta nên lẽ ra bạn phải lập chủ đề khác. Nhưng thôi, tôi làm cho bạn.
1. Mở tập tin của mình -> vào VBE -> chèn module. Code cho module
Mã:
Option Explicit

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

2. Code cho module Sheet1
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim picFilename As String
    If Target.Count = 1 And Target.Row > 2 And (Target.Column = 2 Or Target.Column = 3) Then
        picFilename = ThisWorkbook.Path & "\" & Me.Range("C" & Target.Row).Value & "\" & Me.Range("B" & Target.Row).Value & ".jpg"
        InsertPicture picFilename, Me.Range("D" & Target.Row), , True, True
    End If
End Sub

3. Lưu ý:
a. Hãy đọc ghi chú để biết cách dùng sub InsertPicture.

b. Code chỉ link ảnh vào tập tin, tức ảnh luôn luôn phải có trên đĩa. Nếu muốn sau khi nhập ảnh thì có thể xóa ảnh trên đĩa thì đổi TRUE cuối cùng ở code trên thành FALSE.

c. Code hiển thị ảnh center. Nếu muốn hiển thị kín ô thì thay TRUE trước cuối thành FALSE. Muốn biết center và không center khác nhau như thế nào thì so sánh 2 kết quả.

d. Code chỉ load ảnh JPG. Hoặc dùng tất cả JPG hoặc tất cả PNG. Nếu tất cả PNG thì sửa trong code thành ".png". Nếu muốn cả JPG cả PNG thì tự sửa code.

e. Hãy tìm kiếm trên GPE: tác giả bởi batman1, từ khóa: InsertPicture. Hãy đọc thêm các bài của tôi để thành thạo.
 
Lần chỉnh sửa cuối:
Vấn đề của bạn khác vấn đề của người ta nên lẽ ra bạn phải lập chủ đề khác. Nhưng thôi, tôi làm cho bạn.
1. Mở tập tin của mình -> vào VBE -> chèn module. Code cho module
Mã:
Option Explicit

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

2. Code cho module Sheet1
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim picFilename As String
    If Target.Count = 1 And Target.Row > 2 And (Target.Column = 2 Or Target.Column = 3) Then
        picFilename = ThisWorkbook.Path & "\" & Me.Range("C" & Target.Row).Value & "\" & Me.Range("B" & Target.Row).Value & ".jpg" quả.
        InsertPicture picFilename, Me.Range("D" & Target.Row), , True, True
    End If
End Sub

3. Lưu ý:
a. Hãy đọc ghi chú để biết cách dùng sub InsertPicture.

b. Code chỉ link ảnh vào tập tin, tức ảnh luôn luôn phải có trên đĩa. Nếu muốn sau khi nhập ảnh thì có thể xóa ảnh trên đĩa thì đổi TRUE cuối cùng ở code trên thành FALSE.

c. Code hiển thị ảnh center. Nếu muốn hiển thị kín ô thì thay TRUE trước cuối thành FALSE. Muốn biết center và không center khác nhau như thế nào thì so sánh 2 kết quả.

d. Code chỉ load ảnh JPG. Hoặc dùng tất cả JPG hoặc tất cả PNG. Nếu tất cả PNG thì sửa trong code thành ".png". Nếu muốn cả JPG cả PNG thì tự sửa code.

e. Hãy tìm kiếm trên GPE: tác giả bởi batman1, từ khóa: InsertPicture. Hãy đọc thêm các bài của tôi để thành thạo.
Con cảm ơn Bác Siwtom,
Thực sự khi chiều con vừa vào diễn đàn con thấy chủ đề lúc đó cũng tầm hết giờ làm việc ở cơ quan con cũng vội về để chuẩn bị tiệc Rằm nên con chưa kip xem chi tiết nội dung trong chủ đề là gì (chỉ lướt lướt phần của Bác viết bên dưới) , con thấy tên chủ đề cũng giống nhu cầu con cần nên con hỏi luôn trong này Bác ạ.
Cảm ơn Bác đã quan tâm & giúp đỡ con.
Con đã hiểu phần chỉ dẫn trong mục Bác đã lưu ý , khi nào ngồi máy con thử nếu có vấn đề gì khó khăn hay chưa như ý muốn thì con sẽ thông thông tin ở đây ạ.
Chúc Bác nhiều sức khỏe ạ.
 
Web KT

Bài viết mới nhất

Back
Top Bottom