Chèn hình vào cell bằng hàm tự tạo

Liên hệ QC

anhtuan1066

Thành viên gạo cội
Tham gia
10/3/07
Bài viết
5,802
Được thích
6,911
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:\Pic\Hinh 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:
Mã:
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.jpgAT04.jpg)
- Gõ công thức này vào cell B3:
PHP:
=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
 

File đính kèm

  • TestComPic.rar
    68.2 KB · Đọc: 7,612
- Tại 1 cell nào đó, bạn gõ hàm =InsertPic("đường dẫn đến hình) ---> ra 1 tấm hình
- Xong bạn chọn tấm hình vừa chèn, đổi tên nó
- Chọn vào cell chứa hàm InsertPic rồi F2 và Enter ---> Ra thêm tấm hình nữa
- vân... vân...
Đâu phải tôi không biết cách chèn hình thật và cũng đâu phải ngẫu nhiên tôi lại chọn giải pháp là chèn hình vào comment
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 #137
 
Upvote 0
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 #137

Mình thây trong mục In có phần in Comment mà.
 
Upvote 0
Đọc kỹ vấn đề họ diễn đạt đi... Họ nói là in bằng code thì không được.

Em thử như thế này, in ra máy ảo thì ổn.

Mã:
Sub PrintPre()
    Application.DisplayCommentIndicator = xlCommentAndIndicator
    ActiveSheet.PrintPreview
End Sub
 
Upvote 0
Em thử như thế này, in ra máy ảo thì ổn.

Mã:
Sub PrintPre()
    Application.DisplayCommentIndicator = xlCommentAndIndicator
    ActiveSheet.PrintPreview
End Sub
Bạn thử code với hàm chèn hình vào cell đó, nếu mà được thì hay quá. Chứ code trên theo mình nghĩ người ta chắc cũng nghĩ tới.
 
Upvote 0
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 #137
Việc chỉnh Page Setup là chuyện mà người ngồi trên máy tính phải biết (in cái gì, in từ đâu đến đâu...)
Đặt trường hợp bạn định viết code để dành cho người không biết gì có thể dùng được mà không cần tinh chỉnh gì cả, bạn có thể viết 1 code làm công việc Page Setup kia là xong. Code có thể nằm trong sub AutOpen hoặc đặt trong sự kiện Workbook_BeforePrint, chẳng hạn:
Mã:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
  Dim wks As Worksheet
  Set wks = ActiveSheet
  wks.PageSetup.PrintComments = xlPrintInPlace
End Sub
Nói chung là tôi không gặp bất cứ vấn đề gì trong việc in ấn với comment cả (kể cả in bằng tay hay dùng code)
 
Upvote 0
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 #137
Em thấy anh cùng công ty với anh langtuchungtinh360 mà. Anh nhờ anh ấy giúp cho
 
Upvote 0
Việc chỉnh Page Setup là chuyện mà người ngồi trên máy tính phải biết (in cái gì, in từ đâu đến đâu...)
Đặt trường hợp bạn định viết code để dành cho người không biết gì có thể dùng được mà không cần tinh chỉnh gì cả, bạn có thể viết 1 code làm công việc Page Setup kia là xong. Code có thể nằm trong sub AutOpen hoặc đặt trong sự kiện Workbook_BeforePrint, chẳng hạn:
Mã:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
  Dim wks As Worksheet
  Set wks = ActiveSheet
  wks.PageSetup.PrintComments = xlPrintInPlace
End Sub
Nói chung là tôi không gặp bất cứ vấn đề gì trong việc in ấn với comment cả (kể cả in bằng tay hay dùng code)
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
Mã:
  Dim wks As Worksheet
  Set wks = ActiveSheet
  wks.PageSetup.PrintComments = xlPrintInPlace
còn thêm dòng này nữa
Mã:
Application.DisplayCommentIndicator = xlCommentAndIndicator
in ra vẫn không hiện comment
 
Upvote 0
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
Mã:
  Dim wks As Worksheet
  Set wks = ActiveSheet
  wks.PageSetup.PrintComments = xlPrintInPlace
còn thêm dòng này nữa
Mã:
Application.DisplayCommentIndicator = xlCommentAndIndicator
in ra vẫn không hiện comment
Code trên chỉ là gợi ý setup cho 1SHEET! Nếu in NHIỀU SHEET thì phải... LÀM SAO?
 
Upvote 0
Code trên chỉ là gợi ý setup cho 1SHEET! Nếu in NHIỀU SHEET thì phải... LÀM SAO?
Mã:
Arr = array("Sheet1","Sheet2","Sheet3","Sheet4")
Sheets(Arr).select
Set wks = ActiveSheet
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
 
Upvote 0
Mã:
Arr = array("Sheet1","Sheet2","Sheet3","Sheet4")
Sheets(Arr).select
Set wks = ActiveSheet
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
Trời đất ơi! Không phải bạn chứ?
Thấy bạn làm mấy file hoành tráng quá trời nên tôi không nghĩ ra lý do tại sao tình huống này có thể làm khó bạn được nhỉ?
Tôi đã nói rõ ràng:
Code trên chỉ là gợi ý setup cho 1SHEET! Nếu in NHIỀU SHEET thì phải... LÀM SAO?
Vậy thì bạn phải nghĩ đến For... Next gì đó chứ!
Mã:
  Dim arr, sh As Object
  arr = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")
  Sheets(arr).Select
  For Each sh In ActiveWindow.SelectedSheets
    sh.PageSetup.PrintComments = xlPrintInPlace
  Next
 
Upvote 0
Trời đất ơi! Không phải bạn chứ?
Thấy bạn làm mấy file hoành tráng quá trời nên tôi không nghĩ ra lý do tại sao tình huống này có thể làm khó bạn được nhỉ?
Tôi đã nói rõ ràng:

Vậy thì bạn phải nghĩ đến For... Next gì đó chứ!
Mã:
  Dim arr, sh As Object
  arr = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")
  Sheets(arr).Select
  For Each sh In ActiveWindow.SelectedSheets
    sh.PageSetup.PrintComments = xlPrintInPlace
  Next
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 nà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
Mã:
Sheets(arr).Select
'xong rồi dùng lệnh in 
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
'hoặc xuất PDF: Save As PDF
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=str_Path & TenFile
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
 
Upvote 0
đây là dùng cách chèn ảnh như em viết bên trên (File PDF)
upload_2017-7-27_20-34-50.png

đây là chèn bằng comment (File PDF)
upload_2017-7-27_20-35-49.png
trên trang tính
upload_2017-7-27_20-36-54.png


mặc dù code đã chọn các sheet được in và có chỉnh lại để in ghi chú như thầy chỉ nhưng in vẫn không có ảnh
upload_2017-7-27_20-39-10.png
 
Upvote 0
đây là dùng cách chèn ảnh như em viết bên trên (File PDF)
View attachment 180498

đây là chèn bằng comment (File PDF)
View attachment 180499
trên trang tính
View attachment 180500


mặc dù code đã chọn các sheet được in và có chỉnh lại để in ghi chú như thầy chỉ nhưng in vẫn không có ảnh
View attachment 180502
Chết ngắt luôn! Bạn đã viết code thành 1 dự án lớn hẳn rồi. Xem code trong hình chụp thì thấy rằng phải sửa rất nhiều chỗ mới xong (bởi bạn áp code của tôi vào thấy.. trật lất)
----------------------
Cũng vì code của bạn đã trở thành DỰ ÁN LỚN nên mọi người đều rất ngại khi phải xem và sửa. Vì vậy, bạn "bí" chỗ nào, hỏi chỗ đó và chỉ nên đưa file + code vừa đủ (chứ đưa 1 "rừng" thế kia, không ai trả lời là đúng rồi)
 
Upvote 0
Chết ngắt luôn! Bạn đã viết code thành 1 dự án lớn hẳn rồi. Xem code trong hình chụp thì thấy rằng phải sửa rất nhiều chỗ mới xong (bởi bạn áp code của tôi vào thấy.. trật lất)
----------------------
Cũng vì code của bạn đã trở thành DỰ ÁN LỚN nên mọi người đều rất ngại khi phải xem và sửa. Vì vậy, bạn "bí" chỗ nào, hỏi chỗ đó và chỉ nên đưa file + code vừa đủ (chứ đưa 1 "rừng" thế kia, không ai trả lời là đúng rồi)
để em xem lại. có thể sai chỗ nào đó
Mã:
Sub Test()
Dim Arr As Variant
Arr = Array("BB_MTN", "TAB_SDD")
Sheets(Arr).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="D:\A.pdf"
End Sub
Thế này thì lại có ảnh
Ẹc.... Ẹc....
 
Upvote 0
co the dung ham nay cho link tao bang ten khac ko
Vi du :pICFIT( B2) ,VOI B2= "OPEN FILE".
OPEN FILE DA DUOC TAO LINK
CAM ON NHIEU AK
 
Upvote 0
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:\Pic\Hinh 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:
Mã:
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.jpgAT04.jpg)
- Gõ công thức này vào cell B3:
PHP:
=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
dear thầy,

File của em chèn hình vào ok đẹp nhưng in không thấy được hình, mong thầy xem giúp em
 
Upvote 0
Web KT

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

Back
Top Bottom