Mừng Sinh Nhật GPE 11: sáng 25/6 Hà Nội; 1/7 Huế/Đà Nẵng; Trưa 2/7 TPHCM

Hiển thị hình ảnh trong excel

Thảo luận trong 'Lập Trình với Excel' bắt đầu bởi nhatquyelec, 12 Tháng bảy 2011.

  1. nhatquyelec

    nhatquyelec Thành viên mới

    chào các bạn, mình là một người dùng excel thích dùng các tính năng VBA nhưng không rành nhiều về lập trình, nên mình muốn nhờ mọi người giúp đỡ tôi một vấn đề như sau :
    mình muốn tại một ô, khi mình chọn MBA thì tại một khung kế bên sẽ hiện hình ảnh của Máy biến áp, chọn vào XA thì khung bên hiện hình ảnh xà, ...tương tự như vậy...
    mình đã làm như sau :
    Tại ô chứa các chữ viết tắt : MBA, XA,... mình dùng tính năng "Data Validation" để tạo các mục chọn,
    tiếp theo mình vẽ khung chứa hình ảnh bằng Image(activeXcontrol) trong mục Developer, excel07), rồi tiếp theo đó thì mình không biết làm thế nào nữa, hì hì...
    Mong những ai thấy vấn đề này đơn giản thì giúp đỡ cho
    cám ơn !
    email : nhatquyelec@gmail.com
     
  2. dhn46

    dhn46 Hướng tới tương lai

    thế này hợp ý bạn chưa?
     

    Các file đính kèm:

  3. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

    Code của bạn thế này:
    PHP:
    Dim anh As String
    Private Sub Worksheet_Change(ByVal Target As Range)
      
    Set rng Application.Intersect(Target, [d4])
      
    anh = [d4]
      If 
    Not Target Is Nothing Then
        Me
    .Image1.Picture LoadPicture(ThisWorkbook.Path "\" & anh & ".jpg")
      End If
    End Sub
    Nó không sai nhưng mà... THỪA đến mức không cần thiết
    Tôi thì sẽ viết vầy:
    PHP:
    Private Sub Worksheet_Change(ByVal Target As Range)
      If 
    Target.Address "$D$4" Then
        Sheet1
    .Image1.Picture LoadPicture(ThisWorkbook.Path "\" & Target & ".jpg")
      End If
    End Sub
     
  4. ngodany135

    ngodany135 Thành viên thường trực

    Sao chưa chạy được vậy thầy

    Em chưa hiểu về nó, mong thầy chỉ giúp tiếp em, cảm ơn
     
  5. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

    Sai 3 chổ:
    Thứ nhất If Target.Address = "$b$2" then là sai! Không phải muốn tùy tiện viết b thường hay hoa gì cũng được! Phải sửa thành vầy If Target.Address = "$B$2" then
    Thứ hai: ng.Image1.Picture là sai ---> Đúng thì phải vầy Sheets("ng").Image1.Picture hoặc Sheet1.Image1.Picture
    Thứ ba: Trên bảng tính của bạn chẳng có cái Image1 nào cả ---> Phải vẽ ra chứ
     

    Các file đính kèm:

  6. dhn46

    dhn46 Hướng tới tương lai

    Em cảm ơn thày NDU đã chỉ bảo thật hay. Code ngắn gọn mà hiệu quả.
    Cho e xin phép dựa vào code của thày trả lời bạn ngodany135
    code của bạn
    Mã:
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Address = "[COLOR=#ff0000]$b$2[/COLOR]" Then
    [COLOR=#ff0000]    ng[/COLOR].Image1.Picture = LoadPicture(ThisWorkbook.Path & "\" & Target & ".jpg")
      End If
    End Sub
    
    Có 3 chỗ sai
    1 - không có Image1 trong sheet1
    2 - (ng...) Cái này là tên sheet trong phần name chứ không phải ng
    3 - $b$2 phải là $B$2 vì e làm mãi mà target.address = $B$2
    Hy vọng e nói sai ít thôi..hihi
    Có gì mong các thầy chỉ giáo tiếp
     
  7. dhn46

    dhn46 Hướng tới tương lai

    hic e up bài muộn rồi
     
  8. ngodany135

    ngodany135 Thành viên thường trực

    Cái Thứ ba: Trên bảng tính của bạn chẳng có cái Image1 nào cả ---> Phải vẽ ra chứ.
    ------------
    Hướng dẫn em vẽ cái màu đỏ trên dùm. Cảm ơn
     
  9. dhn46

    dhn46 Hướng tới tương lai

    bạn vào menu view > toolbar > visualbasic
    Nó sẽ hiện ra cái tool của visual basic > chọn IMAGE rồi vẽ như vẽ hình draw vậy
    phải chuột vào nó chọn Property > Name > dánh IMAGE1. ok
     
  10. nhatquyelec

    nhatquyelec Thành viên mới

    trước hết cám ơn mọi người đã quan tâm giúp đỡ, đặc biệt thành viên "ndu96081631", đã đáp ứng được yêu cầu
    Tuy nhiên cảm phiền bạn giải thích các mã mà bạn viết được không, mình mới tập về VBA nên muốn hiểu thêm tí về vài lệnh
    Cám ơn mọi người !
    Email : nhatquyelec@gmail.com
     
  11. ndu96081631

    ndu96081631 Ăn cùng GPE, Ở cùng GPE, Sống cùng GPE Staff Member Super Moderator

    Lệnh đơn giản thôi mà
    Private Sub Worksheet_Change(ByVal Target As Range) ---> Câu lệnh này có sẳn trong Excel (khỏi viết).

    untitled1.JPG

    untitled2.JPG

    Đoạn code này hoạt động khi ta gõ gì đó vào vùng quy định. Vùng quy định ở đây là Target.

    If Target.Address = "$D$4" Then ---> Nếu gõ gì đó vào 1 cell có địa chỉ là $D$4 thì...

    Sheet1.Image1.Picture = LoadPicture(ThisWorkbook.Path & "\" & Target & ".jpg") ---> Object có tên là Image1 ở sheet1 sẽ được gán hình bằng lệnh LoadPicture("Đường dẫn chứa file hình"). Trong đó Thisworkbook.Path là đường dẫn thư mục chứa file Excel
    ----------------------
    Ngoài ra, để chèn hình ảnh vào Excel. cũng có cách khác khá hay, xem tại đây:
    http://www.giaiphapexcel.com/forum/showthread.php?51408-Chèn-hình-vào-cell-bằng-hàm-tự-tạo
     
    Lần chỉnh sửa cuối: 13 Tháng bảy 2011
  12. nhatquyelec

    nhatquyelec Thành viên mới

    à con điều này nữa, vì số lượng ảnh đại diện về sau có thể lớn, nên mỗi bức ảnh đặt tên theo số sẽ tiện hơn là đặt tên cụ thể luôn, rồi sau đó mình vào file excel tạo một sheet mới gồm 2 cột, một cột ghi tên, một cột ghi mã số tương ứng vd : MBA(cộtA)->1(cộtB), MAYCAT(cộtA) ->2(cộtB),... sau đó qua bên sheet "ng" mà bạn đã tạo, tại cột A2 mình sẽ nhập tên thiết bị vào ( dùng Data Validation làm option chọn cho khoẻ ) , còn cột B2 mình dùng =VLOOKUP(A2,data!A1:b10,2,false).
    kết quả, khi chọn bên cột A2 thì cột B2 cũng nhảy số tương ứng ( để qua đó Image1 có thể tham chiếu vào), tuy nhiên lúc này khung Image không nhảy ảnh như ý nữa nó đứng yên à, sao vậy hè
     
  13. quannguyen1984

    quannguyen1984 Thành viên mới

    Cho mình hỏi thêm, câu lệnh này thì file Excel phải để cùng thư mục với một số hình ảnh. Công ty mình có diễn đàn mình muốn đưa file Excel lên mọi người coi chẳng lẽ đưa cả thư mục thì nặng quá. Mong được giúp đỡ
     
  14. sonlamhpu

    sonlamhpu Thành viên chính thức

    bạn chịu khó úp lên một cái server nào đó rồi gửi đường link lên đấy.
     
  15. quannguyen1984

    quannguyen1984 Thành viên mới

    Có thể trả lời rõ hơn được không bạn, huynhnguyeminhquan@yahoo.com là nick chat của mình, mong được học hỏi thêm.
     

Chia sẻ trang này