Các bạn thử nghiên cứu vào làm trên UserForm để nhìn cho nó đã mắt hơn.
Bạn be09 ơi, nếu có thể bạn thể hiện luôn đi và cho phép Protecsheet và có thêm các chức năng mới gì đó để anh em học tập đi . lâu nay mình không tài nào gửi đính kèm File từ máy lên được chẳng hiểu lý do tại sao nữa ???
Anh be09 có họ "Hưá" , nên cách đây một năm, Ảnh có hứa là khi nào rảnh sẽ làm cho em cái Form, nhưng rồi chả thấy gí hết. Chắc Ảnh bận việc quá, mà em cũng thâý Ảnh chỉ có Form Quản lý công văn đi và đến, và cái Form gì về Tài nguyên môi trường thôi chứ chả có gì.Trong khi đó có người không hứa nhưng vẫn sẵn sàng giúp mọi lúc.
Mấy ngày nghĩ lễ nhưng không có thời gian rảnh, nên chưa thể làm theo yêu cầu của bạn.
Để gọn nhẹ, xin đề nghị bạn tách CSDL hiện có thành 2 trang tính;Xin cảm ơn bác Ndu, bạn hpkhuong, và các bạn khác . . . đã giúp đỡ trong quá trình xây dựng File này.
Up thử lên các bạn tham khảo và bổ xung thêm và chỉnh sửa cho gọn nhẹ hơn nhé - Xin cảm ơn các bạn nhiều nhiều
Thật tuyệt vời. Cảm ơn bác rất nhiều. Bác có thể giải thích giúp dòng màu đỏ đó được không.Tại sao dòng cũ không có tác dụng. Em muốn hiểu rõ chút chút để áp dụng nhiều công việc khác. Hì hì.Bạn sửa code của bạn chổ màu đỏ là được.
Mã:Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range, Picname As String Application.ScreenUpdating = False On Error Resume Next If Not Intersect([F4], Target) Is Nothing Then Set Rng = Sheets(2).Range(Sheets(2).[F7], Sheets(2).[F1000].End(xlUp)) Picname = ThisWorkbook.Path & "\Anhthohan\" & [COLOR=#ff0000][B]Rng.Find(Target, , xlValues, xlWhole, , , True).Offset(, -5)[/B][/COLOR] 'Xoa anh da chon o lan truoc di Sheets(1).Shapes([D6].Address).Delete 'Dinh kich thuoc anh [D6].Select With ActiveSheet.Pictures.Insert(Picname) '.Name = Target.Offset(1, 0).Address .Name = [D6].Address '.Left = Target.Offset(1, 0).Left: Top = Target.Offset(1, 0).Top .Left = [D6].Left: Top = [D6].Top .Width = 310 '(pixcels) <-- dieu chinh be rong .Height = 315 '(pixcels) <-- dieu chinh chieu cao End With 'Di chuyen hinh vao trong khung: ActiveSheet.Shapes("$D$6").IncrementTop 2# ActiveSheet.Shapes("$D$6").IncrementLeft 2.5 End If Application.ScreenUpdating = True End Sub
Bạn bỏ đi dòng màu đỏ này và chạy code của bạn sẽ hiểu rõ.Thật tuyệt vời. Cảm ơn bác rất nhiều. Bác có thể giải thích giúp dòng màu đỏ đó được không.Tại sao dòng cũ không có tác dụng. Em muốn hiểu rõ chút chút để áp dụng nhiều công việc khác. Hì hì.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, Picname As String
Application.ScreenUpdating = False
'[COLOR=#ff0000][B]On Error Resume Next[/B][/COLOR]
If Not Intersect([F4], Target) Is Nothing Then
Set Rng = Sheets(2).Range(Sheets(2).[F7], Sheets(2).[F1000].End(xlUp))
Picname = ThisWorkbook.Path & "\Anhthohan\" & Rng.Find(Target.Value).Offset(, -5)
'Xoa anh da chon o lan truoc di
MsgBox Picname
Exit Sub
Sheets(1).Shapes([D6].Address).Delete
'Dinh kich thuoc anh
[D6].Select
With ActiveSheet.Pictures.Insert(Picname)
'.Name = Target.Offset(1, 0).Address
.Name = [D6].Address
'.Left = Target.Offset(1, 0).Left: Top = Target.Offset(1, 0).Top
.Left = [D6].Left: Top = [D6].Top
.Width = 310 '(pixcels) <-- dieu chinh be rong
.Height = 315 '(pixcels) <-- dieu chinh chieu cao
End With
'Di chuyen hinh vao trong khung:
ActiveSheet.Shapes("$D$6").IncrementTop 2#
ActiveSheet.Shapes("$D$6").IncrementLeft 2.5
End If
Application.ScreenUpdating = True
End Sub
He he, cảm ơn bác đã chỉ bảo, em cũng đã lờ mờ hiểu. Em làm phiền nốt việc nữa là em muốn liệt kê toàn bộ thông tin của 1 mã số ở sheet 3 xuống bên dưới ở sheet 1( có mã số có 6 dòng thông tin nhưng có mã số chỉ 1 dòng thông tin). Em nghiên cứu cả ngày hôm qua nhưng chưa được như ý muốn.Bạn bỏ đi dòng màu đỏ này và chạy code của bạn sẽ hiểu rõ.
Mã:Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range, Picname As String Application.ScreenUpdating = False '[COLOR=#ff0000][B]On Error Resume Next[/B][/COLOR] If Not Intersect([F4], Target) Is Nothing Then Set Rng = Sheets(2).Range(Sheets(2).[F7], Sheets(2).[F1000].End(xlUp)) Picname = ThisWorkbook.Path & "\Anhthohan\" & Rng.Find(Target.Value).Offset(, -5) 'Xoa anh da chon o lan truoc di MsgBox Picname Exit Sub Sheets(1).Shapes([D6].Address).Delete 'Dinh kich thuoc anh [D6].Select With ActiveSheet.Pictures.Insert(Picname) '.Name = Target.Offset(1, 0).Address .Name = [D6].Address '.Left = Target.Offset(1, 0).Left: Top = Target.Offset(1, 0).Top .Left = [D6].Left: Top = [D6].Top .Width = 310 '(pixcels) <-- dieu chinh be rong .Height = 315 '(pixcels) <-- dieu chinh chieu cao End With 'Di chuyen hinh vao trong khung: ActiveSheet.Shapes("$D$6").IncrementTop 2# ActiveSheet.Shapes("$D$6").IncrementLeft 2.5 End If Application.ScreenUpdating = True End Sub
Cảm ơn bác đã chia sẻ một bài rất hữu ích. Em đã xem và học hỏi áp dụng cho công việc của mình nhưng mãi mà không cho hiện hình lên được. Bác kiểm tra giúp xem em sai ở chỗ nào hay thiếu sót ở đâu thì sửa giúp em và chỉ dẫn luôn để em học hỏi thêm. Công việc là cho hiện ảnh lên ở sheet 1 khi nhập mã sô lấy từ sheet 2. Ở đây em có 5 hình làm ví dụ khi em có 200 hình thì có tương tự không? Em cảm ơn trước ạ.
Tôi thấy sao rối mắt với đống code trong file của bạn quá. Bức râu ông nọ cắm cằm bà kia sao bảo load cho đúng hình vào được.
Ở ngoài tên folder chứa hình là "HoSoCBCNV", còn trong code để là "HINH". Nó có ăn nhậu gì với nhau đâu mà bảo load được Pic.
Tôi có giải pháp khác thay thế, là chèn hình đúng vào cái Cell E3 chết tiệt ấy (bạn đã meger rồi đó).
Bạn Xóa cái code sự kiện trong sheet SoYeu_LL đi, dùng đoạn code sau paste vào module
Tại cell E3 bạn xài công thức sau: (và tất nhiên là hình ảnh có cùng 1 đuôi nha , ví dụ ở dưới công thức là .jpg)
Mã:E3 =CommPic("HoSoCBCNV\"&$K$3&".jpg")
Code paste vào module
Mã:Function CommPic(ByVal Pic As String, Optional ByVal Cel As Range) As String Dim mRng As Range, comm As Comment On Error Resume Next Application.Volatile If Cel Is Nothing Then Set Cel = Application.ThisCell Cel(1, 1).Comment.Delete If Not CreateObject("Scripting.FileSystemObject").FileExists(Pic) Then Pic = ThisWorkbook.Path & "\" & Pic End If If CreateObject("Scripting.FileSystemObject").FileExists(Pic) Then If Cel(1, 1).Comment Is Nothing Then Cel(1, 1).AddComment Cel(1, 1).Comment.Text vbLf Set mRng = Cel(1, 1).MergeArea If mRng Is Nothing Then Set mRng = Cel(1, 1) Set comm = mRng(1, 1).Comment comm.Visible = True With comm.Shape .LockAspectRatio = msoFalse .Placement = xlMoveAndSize .Shadow.Visible = msoFalse .Line.Visible = msoFalse .AutoShapeType = msoShapeRectangle .Left = mRng.Left: .Top = mRng.Top .Width = mRng.Width: .Height = mRng.Height .Fill.UserPicture Pic End With End If End Function
P/s: Function trên là học hỏi của anh NDU. Đảm bảo tốc độ nhanh hơn nhiều so với code sự kiện như trong file của bạn
Với Function trên, trên bảng tính. Bạn muốn chèn hình vào cell nào thì cữ gõ công thức như trên là nó chèn.........Quả thật rất là tuyệt đúng không???
Thì trước khi chèn hình bạn phải UnProject sheet, sau khi chèn xong bạn tiếp tục Project sheet.Cho mình hỏi khi cài protect sheet thì làm sao để hiện tấm hình ra ?
Trước hết xin phép bác Ndu, bạn hpkhuong, và một số bạn khác nữa đã giúp đỡ trong quá trình xây dựng File này. Up thử lên các bạn tham khảo và bổ xung thêm và chỉnh sửa cho gọn nhẹ hơn nhé - Xin cảm ơn các bạn nhiều nhiều
Bạn cho mình pass code của ứng dụng này với : hunglsvn@gmail.com cảm ơn bạn nhiều.
Anh be09 có họ "Hưá" , nên cách đây một năm, Ảnh có hứa là khi nào rảnh sẽ làm cho em cái Form, nhưng rồi chả thấy gí hết. Chắc Ảnh bận việc quá, mà em cũng thâý Ảnh chỉ có Form Quản lý công văn đi và đến, và cái Form gì về Tài nguyên môi trường thôi chứ chả có gì.Trong khi đó có người không hứa nhưng vẫn sẵn sàng giúp mọi lúc.
Bài này lâu rồi, nay có thành viên khơi màu nên tôi cũng ý kiến thêm.
Như đã hứa làm cái UserForm để quản lý.
Nhưng từ đó đến nay cũng chưa hoàn thiện xong, nếu đưa lên sử dụng thì sẽ có nhiều trục trặc, rối rắm, nếu làm xong tôi sẽ mở Topic mới với dạng UserForm để load hình theo tên từng nhân viên mà không cần đường dẫn, có thể lấy hình bất cứ nơi đâu.
Các bạn hãy chờ thêm một thời gian nữa, vì hiện tại tôi đang sửa nhà đã dọn bàn ghế chỗ khác quá chật chội nên không có chỗ ngồi đành ngồi dưới đất mà trả lời bài viết nay thấy cũng quá là bất tiện.
Tới nay đã 3 tháng, và thấy bác be09 cũng thường xuyên vào GPE từ đó đến nay, mà chưa thấy file bằng UserForm để quản lý
không biết nhà của Bác be09 đã sửa xong chưa????
Bác lại "Hứa" nữa rồi.