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,905
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,595
Cảm ơn các bác đã chia sẻ. Em thấy ảnh chèn vào comment tự fit cả 2 chiều nên dẫn đến méo hình. Có cách nào lấy được tỉ lệ dài/rộng của file ảnh ngoài không ạ? nếu được ta set size của shape với tỉ lệ phù hợp sẽ rất đẹp. Trân trọng!
 
Upvote 0
hic. mình thử đi thử lại rồi mà k làm được bạn ạ. không biết ntn nữa
 
Upvote 0
Cảm ơn các bác đã chia sẻ. Em thấy ảnh chèn vào comment tự fit cả 2 chiều nên dẫn đến méo hình. Có cách nào lấy được tỉ lệ dài/rộng của file ảnh ngoài không ạ? nếu được ta set size của shape với tỉ lệ phù hợp sẽ rất đẹp. Trân trọng!

Fit pic mình nghiên cứu có thể tự fit ảnh theo tỉ lệ mà ko làm méo hình

http://www.giaiphapexcel.com/forum/showthread.php?120251-Nút-lệnh-tự-resize-ảnh-và-cố-định-ảnh-vào-ô
 
Upvote 0
Bác ơi in ra là mất ạ. Bác sửa giúp em cố định vào ô được không ạ. Em cảm ơn rất nhiều
 
Upvote 0
Thư mục khác vẫn được mà bạn. Cứ gõ bằng tay đường dẫn thư mục vào rồi thí nghiệm xem
thầy ạ, em có góp ý thế này.
ví dụ như tấm hình có kích thước là 300x600 thì khi dùng công thức nếu em chọn vùng chèn là 1 vùng có kích thước tương tự 1 hình vuông, thì khi đó vấn đề xảy ra là hình nó sẽ bị kéo dãn ra theo vùng chọn, hình sẽ bị méo mó không còn được như kích thước tỷ lệ ban đầu nữa. vậy có thể bổ xung thêm tính năng, chèn ảnh vào vùng đó nhưng vẫn giữ nguyên kích thước tỷ lệ của ảnh được không thầy.
 
Upvote 0
thầy ạ, em có góp ý thế này.
ví dụ như tấm hình có kích thước là 300x600 thì khi dùng công thức nếu em chọn vùng chèn là 1 vùng có kích thước tương tự 1 hình vuông, thì khi đó vấn đề xảy ra là hình nó sẽ bị kéo dãn ra theo vùng chọn, hình sẽ bị méo mó không còn được như kích thước tỷ lệ ban đầu nữa. vậy có thể bổ xung thêm tính năng, chèn ảnh vào vùng đó nhưng vẫn giữ nguyên kích thước tỷ lệ của ảnh được không thầy.
Nếu có nhu cầu thì bạn tự làm cũng được mà
 
Upvote 0
trình độ em sao làm được thầy --=0. cứ mỗi lần muốn cái gì là lục tung "gu gồ" mờ mắt luôn.

Bạn cứ đùa! Tôi thấy bạn thiết kế file tiến độ thi công hay quá trời luôn. Hàm bạn viết còn phức tạp chứ hàm chèn hình của tôi có gì đâu bạn
 
Upvote 0
Bạn cứ đùa! Tôi thấy bạn thiết kế file tiến độ thi công hay quá trời luôn. Hàm bạn viết còn phức tạp chứ hàm chèn hình của tôi có gì đâu bạn
vậy thầy chỉ em đoạn code lấy thông tin của file được chọn yk thầy. em tự sửa lại.
trước em tìm được đoạn code fso lấy toàn bộ thông tin của mọi tệp tin (nếu có) mà giờ lạc đâu mất rồi. nên không biết code lấy size ảnh (đối với trường hợp này) để chỉnh lại.
 
Upvote 0
vậy thầy chỉ em đoạn code lấy thông tin của file được chọn yk thầy. em tự sửa lại.
trước em tìm được đoạn code fso lấy toàn bộ thông tin của mọi tệp tin (nếu có) mà giờ lạc đâu mất rồi. nên không biết code lấy size ảnh (đối với trường hợp này) để chỉnh lại.

Thử hàm này xem:
Mã:
Function PicDimensions(ByVal FileName As String)
  On Error Resume Next
  Dim sName As String, sFolder As String
  Dim FSO As Object, oShel As Object
  Set FSO = CreateObject("Scripting.FileSystemObject")
  Set oShel = CreateObject("Shell.Application")
  If FSO.FileExists(FileName) Then
    sFolder = FSO.GetFile(FileName).ParentFolder.Path
    sName = FSO.GetFile(FileName).Name
    With oShel.Namespace("" & sFolder & "")
      PicDimensions = .Getdetailsof(.ParseName("" & sName & ""), 31)
    End With
  End If
End Function
Code lấy kích thước của file hình
 
Upvote 0

File đính kèm

  • Untitled.jpg
    Untitled.jpg
    26.3 KB · Đọc: 39
  • CommPic (1).txt
    4.6 KB · Đọc: 50
Lần chỉnh sửa cuối:
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

bài này rất hay cảm ơn thầy,
nhưng cho e hỏi sao trong file ví dụ của thầy e ấn đảo qua đảo được, ok.
nhưng e bỏ ảnh của e vào thì chạy ra một ô màu hồng ko thấy ảnh, em kiểm tra ảnh của thầy chỉ có 7kb , ảnh của em tối 200kb .
vậy làm sao để có thể bỏ được những ảnh như thế ah, cảm ơn thầy
 
Upvote 0
Anh ơi em làm như anh hướng dẫn nhưng đến bước cuối cùng =CommPic(B5,C5) thì báo lỗi ạ. Các bước trên hiển thị giống như file anh gửi ạ
 
Upvote 0
Chào Thầy ndu và các A/E GPE

Sau khi xem các bài hướng dẫn trên em đã chèn được hình vào ô excel. Em muốn tạo thêm 01 sheet (hoặc 1 file excel khác) chỉ chứa nội dung thôi (hình ảnh nằm trong cell - không còn công thức nữa). Em đã thử copy và paste value, comment, formats, tuy nhiên hình ảnh không còn nằm trong cell nữa.

Rất mong nhận được hướng dẫn của thầy và mọi người

Em cảm ơn
 
Upvote 0
Chào Thầy ndu và các A/E GPE

Sau khi xem các bài hướng dẫn trên em đã chèn được hình vào ô excel. Em muốn tạo thêm 01 sheet (hoặc 1 file excel khác) chỉ chứa nội dung thôi (hình ảnh nằm trong cell - không còn công thức nữa). Em đã thử copy và paste value, comment, formats, tuy nhiên hình ảnh không còn nằm trong cell nữa.

Rất mong nhận được hướng dẫn của thầy và mọi người

Em cảm ơn
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
 

File đính kèm

  • commpic.txt
    4.1 KB · Đọc: 42
Upvote 0
Dạ cám ơn Anh langtuchungtinh360

Em đã giải quyết được vấn đề của em rồi ạ. Anh có thể hướng dẫn giúp em cách sử dụng hàm commpic của anh viết được không ạ. em vẫn sử dụng theo cách cũ là = commpic("đường dẫn tới file ảnh"&""&ô chứa tên ảnh&".JPG"). Phần định dạng ảnh .JPG......em vẫn nhập thủ công, em thấy trong code của anh đã giải quyết vấn đề này nhưng em không biết cách vận dụng.

Mong anh hướng dẫn. Cám ơn Anh
 
Upvote 0
Dạ cám ơn Anh langtuchungtinh360

Em đã giải quyết được vấn đề của em rồi ạ. Anh có thể hướng dẫn giúp em cách sử dụng hàm commpic của anh viết được không ạ. em vẫn sử dụng theo cách cũ là = commpic("đường dẫn tới file ảnh"&""&ô chứa tên ảnh&".JPG"). Phần định dạng ảnh .JPG......em vẫn nhập thủ công, em thấy trong code của anh đã giải quyết vấn đề này nhưng em không biết cách vận dụng.

Mong anh hướng dẫn. Cám ơn Anh
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ế)
 
Upvote 0
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
 

File đính kèm

  • Function InsertPic.txt
    5.3 KB · Đọc: 81
Upvote 0
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
- 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
 
Upvote 0
Web KT
Back
Top Bottom