Chèn hình vào cell bằng hàm tự tạo
Xưa nay người ta thường chèn hình vào bảng tính bằng 1 thủ tục nào đó (Sub…). Vậy các bạn có nghĩ rằng có thể chèn hình bằng hàm tự tạo không? Tức là ta gõ hàm vào cell, lập tức hình được chèn vào ngay cell ấy!
Ví dụ ta gõ thế này: =CommPic("D:PicHinh 1.jpg",C5) thì lập tức Hinh 1.jpg được chèn vừa vặn vào cell C5
Hấp dẫn nhỉ? Vậy mà code lại khá đơn giản:
Function CommPic(Pic As String, Cel As Range) As String
On Error Resume Next
Application.Volatile
Cel.Comment.Delete
If Cel.Comment Is Nothing Then Cel.AddComment
Cel.Comment.Text vbLf
With Cel.Comment.Shape
.Left = Cel.Left: .Top = Cel.Top: .Visible = True
.Width = Cel.Width: .Height = Cel.Height
.Fill.UserPicture Pic
End With
End Function
Thí nghiệm:
– Mở Excel, chèn code trên vào module, xong lưu file vào 1 thư mục nào đó
– Copy 1 số hình vào cùng thư mục chưa file Excel (file của tôi có 4 hình AT01.jpg, AT02.jpg, AT03.jpg và AT04.jpg)
– Gõ công thức này vào cell B3:
=LEFT(CELL("filename",A1),FIND("[",CELL("filename",A1))-1)
– Từ cell A5 trở xuống, gõ tên các file hình
– Tại cell B5, gõ công thức =$B$3&A5 và kéo fill xuống
– Tại cell C5, gõ công thúc =CommPic(B5,C5) và kéo fill xuống
Xem thử hình đã được Add vào có ngoạn mục không?
Hy vọng tạo sự dễ dàng cho các bạn, những ai quan tâm đến việc chèn hình ảnh vào bảng tính
www.giaiphapexcel.com/diendan/threads/ch%C3%A8n-h%C3%ACnh-v%C3%A0o-cell-b%E1%BA%B1ng-h%C3%A0m-t%E1%BB%B1-t%E1%BA%A1o.51408/
Thiết kế Tổng đãi ngộ (Total Rewards) theo khung SHRM
Khóa học “Thiết kế Tổng phần thưởng (Total Reward) chuẩn khung SHRM” giúp bạn nắm vững toàn bộ hệ thống đãi ngộ theo chuẩn...
Xem khóa học
Nhân tiện có bạn thắc mắc về hàm này liên quan đến Merge cell tại đây:
https://www.giaiphapexcel.com/forum/showthread.php?52995-Tự-động-thay-đồi-hình-ảnh-theo-danh-sách-và-insert-copy-đc
Tôi cải tiến lại hàm này như sau:
Cú pháp sử dụng vẫn như cũ
Mũi tên thì không thể làm mất, nhưng cái màu đỏ thì em cho nó biến được đấy Thầy!
Sử dụng một trong 3 thủ tục này:
Nhưng tốt nhất KHÔNG sử dụng, vì mất công phải set nó lại hiện trạng ban đầu.
Thêm dòng này vào hàm CommPic là được rồi:
Application.DisplayCommentIndicator = -1
Vậy theo bạn thì hình từ đâu mà có?
Có vài cách như sau:
1> Hình được cho vào 1 folder (như bài 1)
2> Hình được chèn thẳng vào trong 1 sheet nào đó trong file
3> Hình được đặt trên server mạng cty
Riêng với cách 2 thì cũng làm cho file nặng lên thêm vì dung lượng hình trong sheet và cũng không thể dùng cách này để chèn hình vào Comment
Cách 3 cũng khả thi nếu bạn biết lưu hình lên server
Ngoài ra, nếu máy tính của người nhận có kết nối internet, ta có thể post hình lên web (photobucket chẳng hạn) rồi chèn hình vào comment bằng link hình
Thế bạn muốn chèn hình vào chổ nào? Trong cái khung vuông vuông bên sheet MauKM chăng?
Thêm nữa: Tôi để ý trong file của bạn có trường hợp 1 mã sản phẩm nhưng nhận được nhiều hàng khuyến mãi (chẳng hạn vừa bàn phím, vừa quạt điện). Trường hợp này ta sẽ "show" hình như thế nào đây?
Xem file thử có đúng ý bạn không nha!
Chọn mã sản phẩm tại cell A3, hình sẽ tự thay đổi
(nhớ Enable macros nhé)
Không phải biến mất là do di chuyển hay thay đổi kích thước. Biến mất khi bạn click vào ảnh (sẩy ra khi bạn di chuyển hoặc thay đổi kích thước) và sau đó click vào cell khác. Bạn cứ thử "lỡ nhầm" click vào ảnh rồi sau đó không di chuyển và thay đổi kích thước, tiếp theo click vào cell khác. Ảnh sẽ biến mất.
Hay ta chơi Picture?
Cái đó dễ thôi. Thêm đoạn này ở trên With.. End With là được:
Gửi lại file nhé
Bạn hỏi thế sao mà biết trả lời đây? Tôi có xài MAC đâu chứ
(mà chắc cũng hiếm người xài)
Hàm CommPic phiên bản mới nhất với nhiều tùy chọn:
Khả năng của hàm:
– Như ý anh: Nếu đường dẫn không tồn tại, sẽ xóa Comment
– Cho phép chèn hình có trong ổ đĩa máy tính hoặc hình trên Web
– Tự động thay đổi size hình và dịch chuyển theo cell (khi cell thay đổi kích thước, chỉ cần bấm F9 để cập nhật)
– Cho phép thu nhỏ, phóng to hình tùy ý. Ví dụ =CommPic(A1, , 80%, 80%) có nghĩa là thu nhỏ chiều ngang và chiều dọc 80% so với cell (mặc định là 100%)
Những khả năng mở rộng chỉ là dạng Optional, nếu anh không thích dùng vẫn có thể bỏ qua không cần khai báo. Ví dụ anh chỉ muốn chèn hình vào cell B1, với đương dẫn nằm ở A1, vậy chỉ cần gõ vào B1 thế này là đủ: =CommPic(A1) mà không cần quan tâm những đối số phía sau
thêm dòng màu đỏ đó thử xem
Thử hàm này xem:
Code lấy kích thước của file hình
vậy bạn chưa hiểu cách hoạt động của nó rồi.
cách thức hoạt động của hàm là chèn chú thích comment vào nên bạn copy kiểu gì cũng chả theo được đâu
nếu sau khi bạn chèn ảnh xong rồi mà muốn giữ nguyên ảnh đó thì sau khi chèn xong bạn xóa công thức tại ô đó đi. lưu ý không xóa luôn ô chứa công thức nha, chỉ xóa công thức thôi, còn nếu bạn muốn vẫn còn công thức mà hình ảnh không mất thì có thể đặt điều kiện theo kiểu =if(true, chèn hình, không làm gì)
thích thì dùng code sau, tôi đã sửa vài chỗ để phù hợp với tôi thôi, bạn thích thì dùng, không thì cứ dùng code của thầy ndu
tại code đó tôi lười không nhớ hết được các định dạng ảnh nên để cho nó tự xử ấy mà.
+cụ thể là nếu bạn nhập đường dẫn cụ thể thì code sẽ lấy đường dẫn đó
+còn nếu định dạng file không đúng (không chèn được) thì sẽ sửa lại cho đúng rồi chèn vào.
+ code cũng kiểm tra đường dẫn bạn nhập có đúng không, nếu không tồn tại thì code sẽ kiểm tra trong thư mục Picture tại ổ C, nếu có file tên như thế thì sẽ chèn vào. không thì thôi không chèn
+vùng chèn ảnh không bắt buộc phải gộp lại tức là có thể chèn tại các ô rời rạc, chỉ cần chọn vùng là được
+đôi khi kích thước ảnh không phù hợp với tỷ lệ vùng chèn thì code cũng xử lý để chèn vào vừa đủ phạm vi bạn chèn vì vậy ảnh sẽ không bị sai kích thước, méo mó.
cách sử dụng thì cũng giống như cách gốc thôi, có điều chèn ảnh từ internet không được thôi (vì tôi không cần như thế)
sửa lại hàm của anh ndu và langtuchungtinh360 lại một chút
chèn ảnh thật vô luôn chứ không bằng ghi chú nữa (đỡ nhọc công vô chỉnh trong PageSetup để in)
hàm bỏ chức năng chèn ảnh theo link trên mạng
em thấy cách chèn hình bằng comment cũng hay nhưng khi in ra lại phải chỉnh trong cài đặt mới in ra được, vừa rồi em vừa dính vấn đề đó. Ctrl P in ra bình thường, nhưng khi chạy code để in thì in không thấy ảnh. vì thế mới sửa lại bằng cách chèn ảnh vào luôn. cụ thể tại bài này [URL='https://www.giaiphapexcel.com/diendan/threads/c%C3%A1c-c%C3%A2u-h%E1%BB%8Fi-v%E1%BB%81-%C4%91%E1%BB%8Bnh-d%E1%BA%A1ng-in-%E1%BA%A5n-b%E1%BA%A3ng-t%C3%ADnh-%C4%91%E1%BB%81-ngh%E1%BB%8B-post-t%E1%BA%A1i-%C4%91%C3%A2y.31479/page-7#post-802684'%5D#137
vẫn không được anh ạ.
em đã dùng code để chọn danh sách sheet cần in
xong trước những dòng code để in đã cho code này vào
còn thêm dòng này nữa
in ra vẫn không hiện comment
rồi em dùng lệnh in. nhưng vẫn không in ra được comment
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
việc chỉnh để in được comment thì em đã chỉnh trước đó rồi, vào pagesetup vẫn thấy cài đặt in ghi chú như hiển thị, sau khi in vào lại pagesetup thì vẫn còn ở chế độ in ghi chú. nhưng trớ trêu thay khi in thì lại không thấy.
thầy qua trang [URL='https://www.giaiphapexcel.com/diendan/threads/c%C3%A1c-c%C3%A2u-h%E1%BB%8Fi-v%E1%BB%81-%C4%91%E1%BB%8Bnh-d%E1%BA%A1ng-in-%E1%BA%A5n-b%E1%BA%A3ng-t%C3%ADnh-%C4%91%E1%BB%81-ngh%E1%BB%8B-post-t%E1%BA%A1i-%C4%91%C3%A2y.31479/page-7#post-802684'%5Dnày trả lời giúp em, chứ nói nãy giờ có vẻ đi xa chủ đề này mất rồi
em có viết gì đâu mà hoành tráng đâu thầy. mới tập tọe à.
vậy còn
ngoài cách trên thì có cách nào tốt hơn để in 1 loạt danh sách sheet không thầy.
code trên là em ghi macro lại nên có vẻ chậm.
em thấy xuất PDF hình như có cách khác với Save As thành PDF thì phải
để em xem lại. có thể sai chỗ nào đó
Thế này thì lại có ảnh
Ẹc…. Ẹc….
1. Với code dưới thì ảnh được nhập vĩnh viễn vào sheet. Khi mang tập tin sang máy khác thì không phải mang ảnh đi theo.
Với code
thì khi xóa ảnh trên đĩa hoặc sang máy khác không có ảnh đó thì trên sheet sẽ rỗng. Cho tới cuối đời vẫn phải giữ ảnh trên đĩa. Nếu nhu cầu của bạn đúng là thế thì ngừng đọc tại đây và không dùng code. Vì code nhập ảnh vào sheet vĩnh viễn. Sau đó bạn có thể xóa ảnh trên đĩa hoặc mang sang máy khác.
2. Bạn có nhiều lựa chọn: nhập vào vùng 1 ô hoặc nhiều ô, nhập vừa khít với vùng, nhập Center trong vùng và nhập ảnh thực.
3. Thêm 1 Module (Atl+F11 -> Insert -> Module) và dán code dưới vào
Rất tiếc là code của tôi nhập ảnh vĩnh viễn.
Bạn có các lựa chọn:
1. Chọn bằng tay các ảnh -> nhấn DELETE trên bàn phím -> lưu lại.
Bạn chỉ chèn 1 ảnh thì chọn và nhấn DELETE thôi. Có khó khăn gì đâu?
2. Thẻ Home -> nhấn nút Find & Select -> chọn Goto To Special … -> đánh dấu chọn Objects -> OK -> nhấn DELETE
Cách này là xóa tất cả các object trên sheet. Nếu ngoài ảnh còn có các đối tượng khác thì không dùng.
3. Cho bây giờ và mãi về sau bạn nên sửa trong code của InsertPicture
Sửa
thành
Sửa
thành
Bây giờ nếu muốn xóa các ảnh đã được chèn bằng InsertPicture thì chạy code
Nhờ người khác thì cũng phải mô tả cho người ta hiểu.
Nhập ảnh vào đâu? Tên ảnh lấy ở đâu? Nhập khi nào?
Không có mô tả thì tôi tự cho ví dụ, rồi hãy tự thích ứng với tập tin thực. Code có sẵn, ví dụ cũng cho sẵn
http://www.giaiphapexcel.com/diendan/threads/%C4%90%C6%B0a-%E1%BA%A3nh-hi%E1%BB%87n-v%C3%A0o-khung-textbox-b%E1%BA%B1ng-vba.84107/post-863151
thế mà không làm được thì bó tay toàn tập.
1. Vùng cần nhập ảnh không bắt buộc phải merge. Hiện tại ví dụ nhập ảnh vào C25:H32. Do cần phải biết lấy ảnh nào cho C25:H32 nên tôi nhập 11540859 vào C25. Tức code sẽ tìm ảnh 11540859.JPG để nhập.
Tức code sẽ tìm ảnh trong thư mục "file anh". Nếu tên thư mục thay đổi thì tự sửa trong code. Thư mục "file anh" phải nằm cùng thư mục với tập tin Excel. Nếu khác thì tự sửa trong code.
Code coi là đang nhập ảnh trong sheet "file". Nếu tên khác thì tự sửa.
2. Trong code ví dụ tôi nhập vào C25 chỉ tên mà không có định dạng JPG vì code có thể tự thêm vào. Tự sửa theo ý muốn.
3. Code InsertPicture và Sub Button2_Click ở trong Module1.
Có chứ! Bạn xem file nhé (hàm CommPic đã cải tiến)
Điều quan trọng là bạn phải đặt tên hình trùng với mã, sau đó dùng hàm này tại B2
Con số 0.8 là độ phóng to thu nhỏ hình so với cell. Nếu không ghi gì có nghĩa là số ấy =1, vừa khít hình với cell
Bất cứ "đường link" nào mà bạn có thể chèn bằng tay vào bảng tính được thì sẽ có thể dùng nó với code
Ví dụ:
Còn "đường link" của bạn thuộc dạng gì?
Thật ra không phải lỗi tại bạn mà là lỗi ở hàm. Khi viết nó, tôi cũng ít có điều kiện để test. Giờ sửa lại
Trong Page Setup của Excel phần Comments bạn chỉnh thành As dispayed on sheet nhé. Sau đó save đuôi pdf là được.
Tức bạn đã chọn cho mình một cách chèn ảnh, cụ thể là dưới dạng Comment. Bây giờ bạn muốn người ta uốn nó theo ý bạn là ảnh phải to ra mà vẫn giữ nguyên kích thước hàng cột?
Nếu không nhất thiết là comment thì đăng bài ở chủ đề mới, nêu rõ yêu cầu, có minh họa và xin hướng dẫn. Cách chèn thì để cho người giúp tự chọn. Đừng theo kiểu cứ bắt chọn một cô rồi bắt người khác phải làm sao cho cô đó "* vượt ngọn cây"
Không nhầm thì khi in bạn phải cài đặt lại 1 chút
1028