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

anh79_ct

Thành viên chính thức
Tham gia ngày
23 Tháng năm 2007
Bài viết
58
Được thích
1
Điểm
670
Tuổi
41
Bài viết hay, nhưng có cách nào lấy hình ảnh khi các file ảnh nằm khác thư mục với file excel không vậy?
Mình có vài ngàn ảnh chi tiết chứa trên server nhưng muốn làm file excel này nằm ở thư mục khác. Mình muốn file excel này link với thư mục chứa hình ảnh đó.
Cám ơn chủ thớt nhé!
 

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia ngày
5 Tháng sáu 2008
Bài viết
30,684
Được thích
53,427
Điểm
11,910
Bài viết hay, nhưng có cách nào lấy hình ảnh khi các file ảnh nằm khác thư mục với file excel không vậy?
Mình có vài ngàn ảnh chi tiết chứa trên server nhưng muốn làm file excel này nằm ở thư mục khác. Mình muốn file excel này link với thư mục chứa hình ảnh đó.
Cám ơn chủ thớt nhé!
Hình nằm chỗ nào thì bạn cứ chỉ đường dẫn chính xác vào hàm là được chứ gì. Đâu có bắt buộc hình phải nằm trong thư mục chứa file Excel
 

anh79_ct

Thành viên chính thức
Tham gia ngày
23 Tháng năm 2007
Bài viết
58
Được thích
1
Điểm
670
Tuổi
41
Cám ơn anh nhiều nhé. Mình làm được rồi.
Nhưng có câu này muốn mở rộng thêm chút là có cách nào làm tương tự với file pdf không. Ví dụ mình gõ mã số trùng tên file pdf vào một cell, rồi double click vào cell sẽ mở file pdf lưu sẵn trên 1 thư mục ở sever. Hoặc có thể tự động tạo link đến thư mục đó, để nhấn vào mở file pdf đó luôn.
Dĩ nhiên các file pdf sẽ chứa trong cùng 1 thư mục nào đó trên server.
Xin lỗi nếu câu hỏi này không thuộc chuyên mục này nhé :).
 

befaint

|||||||||||||
Tham gia ngày
6 Tháng một 2011
Bài viết
10,066
Được thích
11,831
Điểm
1,560
Nhưng có câu này muốn mở rộng thêm chút là có cách nào làm tương tự với file pdf không. Ví dụ mình gõ mã số trùng tên file pdf vào một cell, rồi double click vào cell sẽ mở file pdf lưu sẵn trên 1 thư mục ở sever. Hoặc có thể tự động tạo link đến thư mục đó, để nhấn vào mở file pdf đó luôn.
Từ khóa: Hyperlink
 

anh79_ct

Thành viên chính thức
Tham gia ngày
23 Tháng năm 2007
Bài viết
58
Được thích
1
Điểm
670
Tuổi
41
Wow, thật là ảo diệu :). Cám ơn bạn "befaint" nhé!
 

be09

TNMT_Đồng Nai
Tham gia ngày
9 Tháng tư 2011
Bài viết
9,473
Được thích
9,266
Điểm
560
Tuổi
63
Nơi ở
Biên Hòa, Đồng Nai
Cám ơn anh nhiều nhé. Mình làm được rồi.
Nhưng có câu này muốn mở rộng thêm chút là có cách nào làm tương tự với file pdf không. Ví dụ mình gõ mã số trùng tên file pdf vào một cell, rồi double click vào cell sẽ mở file pdf lưu sẵn trên 1 thư mục ở sever. Hoặc có thể tự động tạo link đến thư mục đó, để nhấn vào mở file pdf đó luôn.
Dĩ nhiên các file pdf sẽ chứa trong cùng 1 thư mục nào đó trên server.
Xin lỗi nếu câu hỏi này không thuộc chuyên mục này nhé :).
Đương nhiên là được, nhưng hỏi ở đây thì lạc chủ đề, vào Link sau để tham khảo hoặc hỏi tiếp nhé.
http://www.giaiphapexcel.com/diendan/threads/tạo-hyper-link-cho-1-loạt-file-của-1-folder.81852/
 
Lần chỉnh sửa cuối:

ThaiDieuAnh

Thành viên hoạt động
Tham gia ngày
8 Tháng tám 2016
Bài viết
134
Được thích
24
Điểm
170
Nơi ở
Vinh
Bây giờ em muốn chèn ảnh vào Textbox trên Form, rồi từ form mình xuất hình ảnh xuống cell được không ạ?
 

File đính kèm

Hai Lúa Miền Tây

❆❆❆❆❆❆❆❆
Thành viên BQT
Administrator
Tham gia ngày
18 Tháng ba 2008
Bài viết
7,676
Được thích
14,617
Điểm
1,910
Nơi ở
Tp.HCM

Hai Lúa Miền Tây

❆❆❆❆❆❆❆❆
Thành viên BQT
Administrator
Tham gia ngày
18 Tháng ba 2008
Bài viết
7,676
Được thích
14,617
Điểm
1,910
Nơi ở
Tp.HCM

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia ngày
5 Tháng sáu 2008
Bài viết
30,684
Được thích
53,427
Điểm
11,910
Tự dưng chèn hình vào form, rồi lại xuất xuống sheet? Không hiểu tại sao lại đi lòng vòng cho mệt thế không biết?
 

anh79_ct

Thành viên chính thức
Tham gia ngày
23 Tháng năm 2007
Bài viết
58
Được thích
1
Điểm
670
Tuổi
41
File download từ diễn đàn vẫn là .xls nhưng có thể chèn "Module". Nhưng sao khi mình tạo 1 Module trên file excel mới và chèn đoạn code này vào thì sau đó excel bắt save lại với macro (.xlsm) thì hàm này mới chạy được cho lần mở file tiếp theo, còn không thì chỉ dùng được cho lần mở hiện tại.

Nhưng nếu save với loại .xlsm thì file rất nặng. Có cách nào vẫn giữ loại .xlsx nhưng hàm trong Module vẫn có hiệu lực không?

upload_2018-4-11_17-10-34.png

upload_2018-4-11_17-16-28.png
 

anh79_ct

Thành viên chính thức
Tham gia ngày
23 Tháng năm 2007
Bài viết
58
Được thích
1
Điểm
670
Tuổi
41
Vậy sao file compic.xls (đuôi .xls)down trên diễn đàn về vẫn chạy được hàm trong module thế nhỉ?
 

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia ngày
5 Tháng sáu 2008
Bài viết
30,684
Được thích
53,427
Điểm
11,910
Vậy sao file compic.xls (đuôi .xls)down trên diễn đàn về vẫn chạy được hàm trong module thế nhỉ?
Thì có ai nói rằng đuôi xls không chạy được code đâu chứ
???
Chỉ đuôi xlsx mới không thể chứa code thôi. Vậy bạn đã biết rồi đấy, tính sao thì tùy
 

bjboyn00b

Thành viên mới
Tham gia ngày
17 Tháng mười hai 2010
Bài viết
22
Được thích
0
Điểm
363
File commpic rất hay nhưng mình đang gặp khó ở chỗ là ảnh mình muốn hiển thị sẽ là 1 vùng chứ không phải trong 1 ô ( các phần phía trên mình không điều chỉnh được vì đã theo form biểu ) .
Mong được giúp đỡ
 

File đính kèm

be09

TNMT_Đồng Nai
Tham gia ngày
9 Tháng tư 2011
Bài viết
9,473
Được thích
9,266
Điểm
560
Tuổi
63
Nơi ở
Biên Hòa, Đồng Nai
File commpic rất hay nhưng mình đang gặp khó ở chỗ là ảnh mình muốn hiển thị sẽ là 1 vùng chứ không phải trong 1 ô ( các phần phía trên mình không điều chỉnh được vì đã theo form biểu ) .
Mong được giúp đỡ
Nghĩ cũng ngộ, lấy dữ liệu ngay trong File bài 197 cho thuận tiện quản lý mà lại đi lấy dữ liệu từ File này FIXED ASSETS REGISTER-STANDARD1.xlsx
 

batman1

Thành viên gạo cội
Tham gia ngày
8 Tháng chín 2014
Bài viết
3,569
Được thích
5,458
Điểm
560
File commpic rất hay nhưng mình đang gặp khó ở chỗ là ảnh mình muốn hiển thị sẽ là 1 vùng chứ không phải trong 1 ô
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
Mã:
.Fill.UserPicture Pic
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
Mã:
Sub InsertPicture(ByVal PicFilename As String, Optional Target As range = Nothing, _
                Optional original As Boolean = False, Optional center As Boolean = False)
'    Target: vung nhap anh. Co the la nhieu cell
'    Neu Target = Nothing thi Target = ActiveCell
'    Neu original = True thi nhap anh kich thuoc thuc.
'    Neu original = FALSE thi neu center = True thi anh se center trong vung Target,
'    nguoc lai thi se vua khit vung Target
Dim w As Double, h As Double, shp As Shape, fso As Object
    If Target Is Nothing Then Set Target = ActiveCell
    On Error Resume Next
    Target.Parent.Shapes("r" & Target.Row & "c" & Target.Column).Delete
    On Error GoTo 0
  
    Set fso = CreateObject("Scripting.FileSystemObject")
  
    If fso.FileExists(PicFilename) Then
        Set shp = Target.Parent.Shapes.AddPicture(PicFilename, msoFalse, msoTrue, Target.left, Target.top, 0, 0)
        If Not shp Is Nothing Then
            With shp
                If original Then
                    .ScaleWidth 1, msoTrue
                    .ScaleHeight 1, msoTrue
                ElseIf center Then
                    .ScaleWidth 1, msoTrue
                    .ScaleHeight 1, msoTrue
                    w = Target.Width
                    h = w * .Height / .Width
                    If h > Target.Height Then
                        h = Target.Height
                        w = h * .Width / .Height
                    End If
                    .left = Target.left + (Target.Width - w) / 2
                    .top = Target.top + (Target.Height - h) / 2
                    .Width = w
                    .Height = h
                Else
                    .Width = Target.Width
                    .Height = Target.Height
                End If
                shp.Name = "r" & Target.Row & "c" & Target.Column
                shp.Placement = xlMoveAndSize
            End With
        End If
    End If
   
     Set fso = Nothing
End Sub
 
Lần chỉnh sửa cuối:

bjboyn00b

Thành viên mới
Tham gia ngày
17 Tháng mười hai 2010
Bài viết
22
Được thích
0
Điểm
363
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
Mã:
.Fill.UserPicture Pic
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
Mã:
Sub InsertPicture(ByVal PicFilename As String, Optional Target As range = Nothing, _
                Optional original As Boolean = False, Optional center As Boolean = False)
'    Target: vung nhap anh. Co the la nhieu cell
'    Neu Target = Nothing thi Target = ActiveCell
'    Neu original = True thi nhap anh kich thuoc thuc.
'    Neu original = FALSE thi neu center = True thi anh se center trong vung Target,
'    nguoc lai thi se vua khit vung Target
Dim w As Double, h As Double, shp As Shape, fso As Object
    If Target Is Nothing Then Set Target = ActiveCell
    On Error Resume Next
    Target.Parent.Shapes("r" & Target.Row & "c" & Target.Column).Delete
    On Error GoTo 0
 
    Set fso = CreateObject("Scripting.FileSystemObject")
 
    If fso.FileExists(PicFilename) Then
        Set shp = .Parent.Shapes.AddPicture(PicFilename, msoFalse, msoTrue, Target.left, Target.top, 0, 0)
        If Not shp Is Nothing Then
            With shp
                If original Then
                    .ScaleWidth 1, msoTrue
                    .ScaleHeight 1, msoTrue
                ElseIf center Then
                    .ScaleWidth 1, msoTrue
                    .ScaleHeight 1, msoTrue
                    w = Target.Width
                    h = w * .Height / .Width
                    If h > Target.Height Then
                        h = Target.Height
                        w = h * .Width / .Height
                    End If
                    .left = Target.left + (Target.Width - w) / 2
                    .top = Target.top + (Target.Height - h) / 2
                    .Width = w
                    .Height = h
                Else
                    .Width = Target.Width
                    .Height = Target.Height
                End If
                shp.Name = "r" & Target.Row & "c" & Target.Column
                shp.Placement = xlMoveAndSize
            End With
        End If
    End If
  
     Set fso = Nothing
End Sub
Cảm ơn bác
Công việc của em là quản lý tài sản, cty có khoảng 10000 tài sản cố định, hàng tháng có khoảng trăm tài sản mua mới , mỗi tài sản có mã riêng, em định chụp ảnh về đặt tên ảnh là tên mã tài sản, sau đó dùng hàm để gọi thông tin tài sản, bao gồm cả ảnh ra trong file #197 , sau đấy in ra để lưu bản cứng mỗi tài sản 1 tờ , thế nên file của em không cần lưu ảnh vĩnh viễn, chỉ gọi ảnh của tài sản nào cần thôi bác.
Ví dụ như file em gửi thì mã tài sản ở ô B12 , còn ảnh sẽ hiện ở A23:F44
 
Top Bottom