Giúp đỡ mình tìm hàm trả ra kết quả là hình ảnh.
Công ty mình có trên 7000 bản vẽ kĩ thuật, việc tra cứu và triển khai cho NV làm thực sự tốn quá nhiều thời gian .Mỗi bản vẽ được đặt tên mã.
Bản vẽ sẽ được chứa trong 1 folder ( Ví dụ ổ D )
Mình mong muốn là tạo ra 1 file excel khi gõ tên mã sẽ hiện ra bản vẽ đó . Khi cần sẽ gõ tên mã khác và tương ứng bản vẽ thay đổi theo.Mình có đính kèm theo file . Mong được các cao thủ giúp đỡ.
Cảm ơn nhiều !
– sub InsertPicture trong Module1 có thể dùng trong những tập tin khác nhau khi cần nhập ảnh vào sheet. Đọc hướng dẫn của InsertPicture để biết cách dùng.
– trong module của Sheet1 có code
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell_ As Range, rng As Range
If Target.Row = 1 And Target.Count = 1 Then
InsertPicture ThisWorkbook.Path & "" & Target.Value & ".jpg", Target.Offset(1).MergeArea, False, True, True
End If
End Sub
Tức mỗi khi có sự thay đổi của 1 ô trong dòng 1 thì InsertPicture được gọi để nhập ảnh vào ô ở dòng bên dưới được merge – tức thay đổi ở Target thì ảnh được nhập vào Target.Offset(1).MergeArea
– ảnh hiện thời được nhập center trong ô.
– hiện thời các ảnh trên đĩa và tập tin Excel ở cùng thư mục. Nếu trong cùng thư mục với tập tin Excel có thư mục con là Anh và trong thư mục ảnh mới có các ảnh thì sửa "" thành "Anh"
– hiện thời ảnh là JPG. Nấu các ảnh đều là vd. PNG thì sửa ".jpg" thành ".png"
– ảnh hiện thời được link. Tức không được lưu vĩnh viễn trong tập tin Excel, vì thế phải giữ ảnh trên đĩa để nó được nhập vào ô khi mở tập tin.
Ví dụ ta nhập ảnh vĩnh viễn vào tập tin và xóa trên đĩa. Ảnh nhập vừa khít với ô. Nếu thế thì sửa thành
InsertPicture ThisWorkbook.Path & "" & Target.Value & ".jpg", Target.Offset(1).MergeArea, False, False, False
Hoặc ngắn gọn là
InsertPicture ThisWorkbook.Path & "" & Target.Value & ".jpg", Target.Offset(1).MergeArea
vì 3 giá trị FALSE là mặc định.
www.giaiphapexcel.com/diendan/threads/gi%C3%BAp-%C4%91%E1%BB%A1-m%C3%ACnh-t%C3%ACm-h%C3%A0m-tr%E1%BA%A3-ra-k%E1%BA%BFt-qu%E1%BA%A3-l%C3%A0-h%C3%ACnh-%E1%BA%A3nh.145529/#post-940114
Học Nhân sự Tổng hợp – Trở thành chiến binh nhân sự vững nghiệp vụ
Con người là một trong những yếu tố quan trọng của công ty, là tài sản quý giá của doanh nghiệp. Chính vì thế,...
Xem khóa học
Bạn đọc hướng dẫn trong sub InsertPicture mà vẫn không biết dùng?
Cách gọi InsertPicture và các tham số
InsertPicture <đường dẫn tới ảnh trên đĩa>, <ô hiển thị ảnh>, <hiển thị với kích thước thực?>, <hiển thị center hay vừa khít ô?>, <chỉ link hay nhập ảnh vĩnh viễn vào ô?>
Tôi cho ví dụ về nhập center (với ảnh và khung của bạn mà nhập vừa khít ô thì ảnh sẽ bị thu nhỏ theo chiều cao nhiều hơn so với theo chiều rộng và ảnh sẽ bị méo), nhập vĩnh viễn (để có thể xóa trên đĩa)
Trong Module của sheet "Nhập data" dán code sau
Tại sao điều kiện (đk) để nhập ảnh là
– Code chỉ "phản ứng" khi thay đổi từng ô một (nếu có nhu cầu dán hàng loạt Mã thì code sẽ khác). Vì thế ta có đk Target.Count = 1.
– Code chỉ "phản ứng" khi sự thay đổi trên sheet sảy ra ở những dòng > 1 vì không lý gì lại phản ứng khi sự thay đổi sảy ra ở dòng tiêu đề – dòng 1. Biết đâu người ta chỉnh sửa hoặc thêm tiêu đề. Vì thế ta lấy đk Target.Row > 1
– Code chỉ "phản ứng" khi sự thay đổi trên sheet sảy ra ở cột C (Mã hàng) vì thế có đk Target.Column = 3
Target trong Sub Worksheet_Change chính là vùng mà ở đó đã có sự thay đổi sảy ra. Khi 3 đk trên thỏa mãn thì Target chính là một ô ở cột C, và không nằm ở dòng 1.
Để ý ta thấy nếu ta dịch ô Mã (ở cột C) sang phải 3 cột thì sẽ có ô Hình (ở cột F). Ô Mã là Target thì ô hình là Target.Offset(0, 3). Nhưng do bạn gộp ô nên để ảnh nhập vào cả 3 ô gộp thì phải là Target.Offset(0, 3).MergeArea.
Ở trên là code cho trường hợp tập tin Excel và các ảnh nằm cùng thư mục. Nếu tập tin Excel và thư mục Anh nằm cùng thư mục và các ảnh nằm trong thư mục Anh thì thay "" bằng "Anh"
————-
InsertPicture có thể nhập ảnh vào nhiều ô mà không cần gộp ô. Bạn có thể bỏ hết các ô gộp (Merge). Lúc này trong code ở trên thay
bằng
Tức ô nhập ảnh có được bằng cách dịch ô Mã Target sang phải 3 cột – Target.Offset(0, 3), tiếp theo mở rộng thành vùng vẫn có 1 dòng nhưng 3 cột (F, G, H) – Target.Offset(0, 3).Resize(1, 3)