Giúp đỡ mình tìm hàm trả ra kết quả là hình ảnh.

Liên hệ QC

nthuan1984-G

Thành viên mới
Tham gia
10/10/19
Bài viết
2
Được thích
0
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 !
 

File đính kèm

  • PIC.rar
    5.6 MB · Đọc: 34
- 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
Mã:
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
Mã:
InsertPicture ThisWorkbook.Path & "\" & Target.Value & ".jpg", Target.Offset(1).MergeArea, False, False, False

Hoặc ngắn gọn là
Mã:
InsertPicture ThisWorkbook.Path & "\" & Target.Value & ".jpg", Target.Offset(1).MergeArea

vì 3 giá trị FALSE là mặc định.
 

File đính kèm

  • Help.xlsm
    23.7 KB · Đọc: 62
Chào bác batman1 !

Xin cám ơn bác đã giúp đỡ.
Tuy nhiên, khi triển khai thực tế mình gặp 1 số vấn đề: trong file excel sheet "Nhập data" mình muốn triển khai theo định dạng dọc để in và nhập mã số vào cột mã hàng thì hình không hiện ra được dù cố gắng để hiểu được các dòng lệnh của bác
Vì vậy, mong bác chỉnh sửa lại giùm mình, để khi nhập vào cột Mã Hàng thì hình sẽ hiện ra ở cột Hình.

Xin chân thành cảm ơn bác rất nhiều!
 

File đính kèm

  • Help.xlsm
    21 KB · Đọc: 14
Tuy nhiên, khi triển khai thực tế mình gặp 1 số vấn đề: trong file excel sheet "Nhập data" mình muốn triển khai theo định dạng dọc để in và nhập mã số vào cột mã hàng thì hình không hiện ra được dù cố gắng để hiểu được các dòng lệnh của bác
Vì vậy, mong bác chỉnh sửa lại giùm mình, để khi nhập vào cột Mã Hàng thì hình sẽ hiện ra ở cột Hình.
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
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 And Target.Row > 1 And Target.Column = 3 Then
        InsertPicture ThisWorkbook.Path & "\" & Target.Value & ".jpg", Target.Offset(0, 3).MergeArea, False, True, False
    End If
End Sub
Tại sao điều kiện (đk) để nhập ảnh là
Mã:
Target.Count = 1 And Target.Row > 1 And Target.Column = 3

- 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
Mã:
Target.Offset(0, 3).MergeArea

bằng

Mã:
Target.Offset(0, 3).Resize(1, 3)

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)
 
Web KT
Back
Top Bottom