tìm kiếm ảnh theo danh sách

Liên hệ QC
Trước tiên xin được cám ơn bạn rất nhiều.
M không phải được hưởng đặc biệt, chỉ là người mới và cao tuổi thôi. muốn vọc tý may được addmin thông cảm.
bạn ơi m đã chạy thử code của bạn vẫn thấy báo lỗi. bạn có thể chạy giúp được không. vì mới nên muốn được ưu tiên chút mong bạn hết sức thông cảm. một ần nữa xin được trân trọng cảm ơn.
Với tôi "báo lỗi" chả nói lên cái gì cụ thể. Bó tay.

Nếu bạn muốn nói chuyện với tôi thì phải có tập tin, tôi hơi khó tính. Làm sao tôi biết bạn đã đính kèm, chỉnh sửa code của tôi như thế nào.

Tóm lại: đính kèm tập tin và giải thích cụ thể.
 
Trước tiên xin được cám ơn bạn rất nhiều.
M không phải được hưởng đặc biệt, chỉ là người mới và cao tuổi thôi. muốn vọc tý may được addmin thông cảm.
bạn ơi m đã chạy thử code của bạn vẫn thấy báo lỗi. bạn có thể chạy giúp được không. vì mới nên muốn được ưu tiên chút mong bạn hết sức thông cảm. một ần nữa xin được trân trọng cảm ơn.
Bạn nêu mới tham gia diễn đàn là chuẩn.
Còn việc nêu, bạn là người cao tuổi có cái gì đó sai sai, vì sao? Vì trong số vài người trả lời cho bạn ít nhất họ cũng lớn hơn bạn gần 20 tuổi.
 
Xin nhờ các bác. em có file ảnh khoảng hơn trục ngàn cái, giờ em muốn tìm một số ảnh theo danh sách để riêng ra một tệp khác, ảnh sếp theo mã nv và họ tên ạ. mã nv là chính xác. vậy có cách nào các bác giúp em. e mới học xin thông cảm. Xin trân trọng cám ơn.
Bạn copy file dưới vào folder của bạn chạy thử xem thế nào nhé.
 

File đính kèm

  • danh sách nv(20200318).xlsm
    19 KB · Đọc: 8
Với tôi "báo lỗi" chả nói lên cái gì cụ thể. Bó tay.

Nếu bạn muốn nói chuyện với tôi thì phải có tập tin, tôi hơi khó tính. Làm sao tôi biết bạn đã đính kèm, chỉnh sửa code của tôi như thế nào.

Tóm lại: đính kèm tập tin và giải thích cụ thể.
đây ạ. bạn xem giúp
Bài đã được tự động gộp:

Bạn nêu mới tham gia diễn đàn là chuẩn.
Còn việc nêu, bạn là người cao tuổi có cái gì đó sai sai, vì sao? Vì trong số vài người trả lời cho bạn ít nhất họ cũng lớn hơn bạn gần 20 tuổi.
cám ơn bạn. vậy ra 70 tuổi vẫn đam mê, như vậy tôi chắc quá trẻ rồi . hì
 

File đính kèm

  • danh sách.rar
    1.2 MB · Đọc: 5
Tôi là người thường hướng dẫn rất kỹ. Vì tôi lường được là trong tập tin thực bạn sẽ có rất khác với tập tin ví dụ. Bạn để ý sẽ thấy là rất nhiều người không hướng dẫn đâu.

Hãy đọc lại 6 điểm trong bài #19 của tôi xem bạn có làm đúng không.
Trích
2. Hãy đổi tên trang tính thành "Trang_tinh1", tức không có ký tự Việt. Nếu chọn tên khác thì sửa cả trong code.
Bây giờ tên sheet không còn là "Trang_tinh1" nữa mà là "Sheet1". Nhưng bạn không sửa trong code. Trong code vẫn là
Mã:
With ThisWorkbook.Worksheets("Trang_tinh1")

Còn một cái tôi thấy nữa. Trong tập tin ví dụ dữ liệu bạn có trong 2 cột B và C, từ dòng 3 trở xuống. Bây giờ bạn có trong cột A và B, từ dòng 1 trở xuống. Làm thế thì code bó tay. Nó thao tác trong B4:C... nhưng bây giờ dữ liệu lại là A1:B... thế thì toi rồi.

Tại sao bạn không đính kèm tập tin với code của tôi? Tập tin XLSX không bao giờ chứa code. Sau khi chèn code thì ghi lại dưới định dạng XLSM.

Thôi tôi gửi luôn tập tin đã có code.

Code không copy ảnh của MNV = 1356 vì trong thư mục ảnh không có ảnh cho 1356.
 

File đính kèm

  • Trang_tinh1.xlsm
    17.8 KB · Đọc: 14
Tôi là người thường hướng dẫn rất kỹ. Vì tôi lường được là trong tập tin thực bạn sẽ có rất khác với tập tin ví dụ. Bạn để ý sẽ thấy là rất nhiều người không hướng dẫn đâu.

Hãy đọc lại 6 điểm trong bài #19 của tôi xem bạn có làm đúng không.
Trích

Bây giờ tên sheet không còn là "Trang_tinh1" nữa mà là "Sheet1". Nhưng bạn không sửa trong code. Trong code vẫn là
Mã:
With ThisWorkbook.Worksheets("Trang_tinh1")

Còn một cái tôi thấy nữa. Trong tập tin ví dụ dữ liệu bạn có trong 2 cột B và C, từ dòng 3 trở xuống. Bây giờ bạn có trong cột A và B, từ dòng 1 trở xuống. Làm thế thì code bó tay. Nó thao tác trong B4:C... nhưng bây giờ dữ liệu lại là A1:B... thế thì toi rồi.

Tại sao bạn không đính kèm tập tin với code của tôi? Tập tin XLSX không bao giờ chứa code. Sau khi chèn code thì ghi lại dưới định dạng XLSM.

Thôi tôi gửi luôn tập tin đã có code.

Code không copy ảnh của MNV = 1356 vì trong thư mục ảnh không có ảnh cho 1356.
XIN LỖI BẠN. THẬT SỰ CÁM ƠN BẠN RẤT NHIỀU. BẠN RẤT NHIỆT TÌNH VÀ CŨNG KIÊN NHẪN NỮA. XIN ĐƯỢC CÁM ƠN
 
XIN LỖI BẠN. THẬT SỰ CÁM ƠN BẠN RẤT NHIỀU. BẠN RẤT NHIỆT TÌNH VÀ CŨNG KIÊN NHẪN NỮA. XIN ĐƯỢC CÁM ƠN
tôi đã chạy thử . rất ok. chỉ là khi tôi đưa thêm vào tình huống nếu như ảnh chỉ có MNV không có tên. thì không đọc được bạn ạ. vậy phải xử lý như thế nào.
 
tôi đã chạy thử . rất ok. chỉ là khi tôi đưa thêm vào tình huống nếu như ảnh chỉ có MNV không có tên. thì không đọc được bạn ạ. vậy phải xử lý như thế nào.
Chính vì dữ liệu của bạn không đồng nhất nên tôi đã viết ngay từ bài đầu
1. Cấu trúc các tên ảnh không đồng nhất. Sau Mã là "-" hoặc " " hoặc " -". Vì thế code phải xoay xở.
Tức ảnh lúc có dạng "MNV-Tên" (không có dấu cách giữa MNV và tên), lúc là"MNV Tên" (dấu cách thay dấu -), lúc thì "MNV -Tên" (cả dấu cách và -). Bây giờ lại thêm chỉ có MNV không có tên.

Tôi làm thêm cho bạn trường hợp chỉ có MNV không có tên. Tức trong sheet phải có MNV còn Tên có thể có có thể không, nhưng tên ảnh trên đĩa bắt buộc phải có MNV (tên có thể có hoặc không). Nhưng nếu có thêm tên thì bắt buộc phải có ít nhất là dấu cách hoặc dấu - ngăn cách MNV và tên. Tức ảnh trên đĩa phải có 1 trong những dạng sau: "MNV-tên.jpg", "MNV tên.jpg", "MNV -tên.jpg", "MNV- tên.jpg", "MNV.jpg".

Trong Sub FindAndCopy hãy tìm dòng (chỉ có duy nhất 1 dòng như thế)
Mã:
ma = Replace(sfile.Name, " ", "-", , 1)
và ĐỔI thành
Mã:
ma = Replace(Replace(sfile.Name, ".", "-"), " ", "-", , 1)

Lưu ý: trong tập tin ở bài #24 trên sheet bạn nhập A4 = 1356, B4 = rỗng (không có tên) code không tìm được ảnh trên đĩa do trên đĩa không có ảnh nào có MNV = 1356. Có 1 ảnh với tên ".jpg". Tức ảnh chỉ có định dạng JPG mà không có tên. Không thể gán ảnh như thế cho MNV = 1356 được. Vì sao? Suy nghĩ lôgíc thì thấy thôi. Giả dụ trên sheet có 2 MNV mà không có tên. A4 = 1356, B4 rỗng, A5 = 9876, B5 = rỗng. Vậy thì ảnh trên đĩa ".jpg" kia là thuộc MNV = 1356 hy thuộc MNV = 9876? Không thể biết được.

Vì thế ảnh trên đĩa luôn phải chứa MNV ở đầu.

Tôi không xét trường hợp có tên (cả trên sheet và ảnh trên điã) mà không có MNV. Vì với tôi MNV mới là duy nhất, tên có thể trùng. Vì thế tôi chỉ xét MNV thôi.

Muốn code chạy được thì dữ liệu (trên sheet và ảnh trên đĩa) phải có một qui luật nhất định. Có thể chấp nhận một "sai số" nhất định (dấu - hoặc dấu cách, hoặc cả - và dấu cách, hoặc chả có - và dấu cách - chỉ là MNV.jpg) nhưng code không chấp nhận dữ liệu bừa bãi.
-------------
Tôi nhầm lẫn chút. Trong code dòng
Mã:
Set fso = CreateObject("Scripting.FileSystemObject")
xuất hiện 2 lần. Lần xuất hiện thứ 2 thừa, bạn có thể xóa đi. Sai không sai nhưng thừa không cần thiết.
 
Lần chỉnh sửa cuối:
Xin nhờ các bác. em có file ảnh khoảng hơn trục ngàn cái, giờ em muốn tìm một số ảnh theo danh sách để riêng ra một tệp khác, ảnh sếp theo mã nv và họ tên ạ. mã nv là chính xác. vậy có cách nào các bác giúp em. e mới học xin thông cảm. Xin trân trọng cám ơn.
-------------------


Tham khảo file bài viết:

https://www.giaiphapexcel.com/diendan/threads/lấy-danh-sách-đường-dẫn-file-và-thư-mục-trong-vba.145043/#post-957066
 
Với khả năng được thể hiện qua các bài viết trong chủ đề này thì tôi e rằng chủ thớt sau khi đọc chủ đề của bạn cũng không viết được code cho vấn đề của mình đâu. Hãy đọc kỹ vấn đề của người ta thì sẽ biết.
Việc liệt kê các tập tin trong thư mục thì code của tôi cũng có rồi. Vấn đề là cái "tiếp theo" kia.
 
Chính vì dữ liệu của bạn không đồng nhất nên tôi đã viết ngay từ bài đầu

Tức ảnh lúc có dạng "MNV-Tên" (không có dấu cách giữa MNV và tên), lúc là"MNV Tên" (dấu cách thay dấu -), lúc thì "MNV -Tên" (cả dấu cách và -). Bây giờ lại thêm chỉ có MNV không có tên.

Tôi làm thêm cho bạn trường hợp chỉ có MNV không có tên. Tức trong sheet phải có MNV còn Tên có thể có có thể không, nhưng tên ảnh trên đĩa bắt buộc phải có MNV (tên có thể có hoặc không). Nhưng nếu có thêm tên thì bắt buộc phải có ít nhất là dấu cách hoặc dấu - ngăn cách MNV và tên. Tức ảnh trên đĩa phải có 1 trong những dạng sau: "MNV-tên.jpg", "MNV tên.jpg", "MNV -tên.jpg", "MNV- tên.jpg", "MNV.jpg".

Trong Sub FindAndCopy hãy tìm dòng (chỉ có duy nhất 1 dòng như thế)
Mã:
ma = Replace(sfile.Name, " ", "-", , 1)
và ĐỔI thành
Mã:
ma = Replace(Replace(sfile.Name, ".", "-"), " ", "-", , 1)

Lưu ý: trong tập tin ở bài #24 trên sheet bạn nhập A4 = 1356, B4 = rỗng (không có tên) code không tìm được ảnh trên đĩa do trên đĩa không có ảnh nào có MNV = 1356. Có 1 ảnh với tên ".jpg". Tức ảnh chỉ có định dạng JPG mà không có tên. Không thể gán ảnh như thế cho MNV = 1356 được. Vì sao? Suy nghĩ lôgíc thì thấy thôi. Giả dụ trên sheet có 2 MNV mà không có tên. A4 = 1356, B4 rỗng, A5 = 9876, B5 = rỗng. Vậy thì ảnh trên đĩa ".jpg" kia là thuộc MNV = 1356 hy thuộc MNV = 9876? Không thể biết được.

Vì thế ảnh trên đĩa luôn phải chứa MNV ở đầu.

Tôi không xét trường hợp có tên (cả trên sheet và ảnh trên điã) mà không có MNV. Vì với tôi MNV mới là duy nhất, tên có thể trùng. Vì thế tôi chỉ xét MNV thôi.

Muốn code chạy được thì dữ liệu (trên sheet và ảnh trên đĩa) phải có một qui luật nhất định. Có thể chấp nhận một "sai số" nhất định (dấu - hoặc dấu cách, hoặc cả - và dấu cách, hoặc chả có - và dấu cách - chỉ là MNV.jpg) nhưng code không chấp nhận dữ liệu bừa bãi.
-------------
Tôi nhầm lẫn chút. Trong code dòng
Mã:
Set fso = CreateObject("Scripting.FileSystemObject")
xuất hiện 2 lần. Lần xuất hiện thứ 2 thừa, bạn có thể xóa đi. Sai không sai nhưng thừa không cần thiết.
cám ơn anh nhiều. tôi sẽ sửa
 
Với khả năng được thể hiện qua các bài viết trong chủ đề này thì tôi e rằng chủ thớt sau khi đọc chủ đề của bạn cũng không viết được code cho vấn đề của mình đâu. Hãy đọc kỹ vấn đề của người ta thì sẽ biết.
Việc liệt kê các tập tin trong thư mục thì code của tôi cũng có rồi. Vấn đề là cái "tiếp theo" kia.
---------------------------


Có lẽ Bác batman1 chưa tải File về kiểm tra, tất cả những gì mà chủ thớt mong muốn đều có ở File trong bài viết
 
Web KT
Back
Top Bottom