Tốc độ chèn hình vào file

Liên hệ QC

voduyminh0504

Thành viên mới
Tham gia
11/2/15
Bài viết
47
Được thích
10
Chào các bạn,
Rất mong nhận được sự hỗ trợ của các bạn cho vấn đề tốc độ chèn hình vào file
(Tôi xin lỗi có bất tiện là file đính kèm sẽ gặp vấn đề khi chèn hình vì không có dữ liệu)

Như trong file đính kèm, tôi dùng code để chèn hình trong Sheet2 (GANHINH)
Do code này đòi hỏi để chèn hình thì phải click chuột để hiển thị lệnh (từ ô B2 trở xuống trong sheet GANHINH) rồi gõ Enter thì mới gắn từng hình vào,
vì vậy tôi viết thêm Sub GANHINH

Sub Ganhinh()
For Each Cell In Range("B2:B12")
Cell.FormulaR1C1 = "=""""&DANHSACH!RC"
Application.OnKey "{ENTER}"
Next
End Sub

Để có thể gắn đồng loạt nhiều hình cùng lúc
Vấn đề của tôi là với file nhỏ và số lượng hình ít (như file đính kèm) thì tốc độ xử lý chấp nhận được.
Nhưng với file khá lớn (30Mb) và số lượng hình quá nhiều (gần 1000 hình) thì tốc độ xử lý quá chậm (tôi làm tay gõ từng cell còn nhanh hơn).
Tôi không rõ có thể viết lại cái Sub GANHINH để cải thiện tốc độ được không.
Rất mong nhận được hỗ trợ của các bạn
 

File đính kèm

  • Toc do chen hinh.xlsm
    20.4 KB · Đọc: 15
Chào các bạn,
Rất mong nhận được sự hỗ trợ của các bạn cho vấn đề tốc độ chèn hình vào file
(Tôi xin lỗi có bất tiện là file đính kèm sẽ gặp vấn đề khi chèn hình vì không có dữ liệu)

Như trong file đính kèm, tôi dùng code để chèn hình trong Sheet2 (GANHINH)
Do code này đòi hỏi để chèn hình thì phải click chuột để hiển thị lệnh (từ ô B2 trở xuống trong sheet GANHINH) rồi gõ Enter thì mới gắn từng hình vào,
vì vậy tôi viết thêm Sub GANHINH

Sub Ganhinh()
For Each Cell In Range("B2:B12")
Cell.FormulaR1C1 = "=""""&DANHSACH!RC"
Application.OnKey "{ENTER}"
Next
End Sub

Để có thể gắn đồng loạt nhiều hình cùng lúc
Vấn đề của tôi là với file nhỏ và số lượng hình ít (như file đính kèm) thì tốc độ xử lý chấp nhận được.
Nhưng với file khá lớn (30Mb) và số lượng hình quá nhiều (gần 1000 hình) thì tốc độ xử lý quá chậm (tôi làm tay gõ từng cell còn nhanh hơn).
Tôi không rõ có thể viết lại cái Sub GANHINH để cải thiện tốc độ được không.
Rất mong nhận được hỗ trợ của các bạn
Nêu cụ thể vấn đề mình cần, mô tả càng chi tiết càng tốt. Code của bạn chạy chậm là đúng, muốn nhanh hơn thì phải sửa code hoàn toàn. Bạn phải gửi file excel và hình ảnh nửa mới test được. Bạn viết code bắt buộc phải dùng lệnh Application.OnKey "{ENTER}", nhưng chưa chắc người khác viết sẽ dùng đến nó nhưng đảm bảo đúng yêu cầu của bạn, muốn vậy phải làm cho người khác hiểu thì người khác mới giúp được. Mà với file Excel chèn nhiều hình thì tốc độ cũng chậm thôi, chứ muốn nhanh như những file khác thì làm sao được, nó chỉ cải thiện một phần thôi.
 
Upvote 0
Cám ơn bạn đã trả lời nhanh chóng
Như tôi đã trình bày, tôi muốn khi click vào shape "Gắn hình" thì các hình trong folder dữ liệu theo đường dẫn có tên như trong cột B của sheet 'GANHINH" sẽ tự động gắn vào địa chỉ mong muốn (ở đây là cột D).
Tôi có đính kèm file Excel, nhưng đây là file nhỏ tôi làm để xin các bạn hỗ trợ,
Tốc độ chèn hình trong file này với 10 hình thì ok. Nhưng với một lượng lớn hình và file Excel lớn thì code Ganhinh tôi viết chạy rất chậm.
Tôi mong được sự hỗ trợ của các bạn, viết thế nào cũng được chứ không hẳn chỉnh sửa code tôi viết, để có thể chạy với tốc độ tốt hơn. Kể cả viết lại cái Private Sub của sheet 'GANHINH" vì cái Private sub này đòi hỏi để chèn hình thì phải gõ Enter vào ô chứa tên file (với cả ngàn hình thì gỏ từng cái thì hơi bị dở).

Việc gửi cà ngàn hình với một file excel lớn để test thì có lẽ không khả thi.
Tôi xin lỗi bạn việc này.
 
Upvote 0
Việc gửi cà ngàn hình với một file excel lớn để test thì có lẽ không khả thi.
Lần sau đính kèm cả hình. Lý do có 1000 hình không chính đáng. Người ta không cần thử tốc độ nên 1000 hình không cần thiết. Nhưng người ta viết hộ code thì người ta phải thử xem có lỗi hay không. Vì thế phải đính kèm vài hình.

Tôi làm đúng ý bạn nhưng hơi không thực tế.

Không ai lại chèn tất cả hình có trong "kho". Và lại chèn hình có mã "lần lượt" - như được liệt kê trong sheet DANHSACH. Trong thực tế thì người ta chỉ chèn những hình, và theo đúng thứ tự được liệt kê trong cột B của sheet GANHINH.

Xóa code trong sheet GANHINH, và sửa code như sau.
Mã:
Sub Ganhinh()
Const folderPath = "D:\Photos\"
Dim lastRow As Long, r As Long, filename As String, shpname As String, danhsach(), sh As Worksheet, fso As Object
    Set sh = ThisWorkbook.Worksheets("GANHINH")
    With ThisWorkbook.Worksheets("DANHSACH")
        lastRow = .Cells(Rows.Count, "B").End(xlUp).Row
        If lastRow < 2 Then Exit Sub
        danhsach = .Range("B2:B" & lastRow + 1).Value    ' lay them 1 dong o cuoi
    End With
    Set fso = CreateObject("Scripting.FileSystemObject")
    With sh
        .Range("B2:B100000").ClearContents  ' xoa cac Ma cu
        .Range("B2").Resize(UBound(danhsach, 1) - 1).Value = danhsach   ' chen cac Ma hien hanh
        For r = 1 To UBound(danhsach, 1) - 1    ' khong xet dong lay them
            filename = folderPath & danhsach(r, 1) & ".jpg" ' ten tap tin anh
            shpname = "D" & r + 1   ' ten shape
            On Error Resume Next
            .Shapes(shpname).Delete ' xoa shape cu
            On Error GoTo 0
            If fso.FileExists(filename) Then    ' neu tap tin anh ton tai thi moi chen
                With .Pictures.Insert(filename) ' chen anh
                    .Name = shpname
                    .Top = sh.Range(shpname).Top
                    .Left = sh.Range(shpname).Left
                    .ShapeRange.LockAspectRatio = msoFalse
                    .ShapeRange.Height = 58
                    .ShapeRange.Width = 80
                End With
            End If
        Next r
    End With
    Set fso = Nothing
End Sub
 
Upvote 0
Cám ơn bạn batman1
Một lần nữa code bạn viết làm tôi thay đổi việc xử lý thông tin luôn. Trước đây là tốc độ ẩn hàng không cần thiết, tôi viết theo For ... Next chậm cực kỳ, bạn chỉnh lại thì chạy cực kỳ nhanh. Hôm nay đến tốc độ chèn hình.
Code của bạn chạy tuyệt vời luôn. Tôi mới đưa vào hơn 200 hình nhân sự thì nó chạy chỉ trong khoảng 15 giây là hoàn tất. So với code trước đây của tôi thì một trời một vực.
Rất cám ơn bạn.
Bất tiện duy nhất là sau khi kích hoạt thì hàm trong cột B (lấy mã hình từ file chính) trở thành giá trị mà không còn hàm nữa.
Trước đây tôi định để giảm bớt số hình chèn vào thì hàm này sẽ thay đổi giá trị theo đơn vị thay vì chèn một lúc toàn bộ hình. Tuy nhiên với tốc độ xử lý code của bạn thì không cần thiết nữa.
Thực sự thì tôi còn có một code để Xoá hình để sau khi dùng xong thì xoá toàn bộ hình trong cột D, cần đến đâu thì cứ bấm GANHINH là vào thôi. Code Xoá hình thì chạy lẹ lắm, bấm vào một cái là mất hết nên chẳng thành vấn đề nên tôi không đưa vào file để hỏi bạn.
Tôi cũng xin lỗi đã không thể gửi toàn bộ hình. Tôi e rằng như thế thì nặng quá. Dù sao thì tôi cũng phải thay đổi đôi chút (như đường dẫn) cho phù hợp.
Một lần nữa rất cám ơn bạn.
Chúc bạn nhiều sức khoẻ.
 
Upvote 0
Vâng cùng là tôi cả
Do ban đầu tôi đăng ký bằng email, sau này tôi đăng ký lại với tên của tôi.
Tôi cũng không biết cách nào để nhập lại. Dù sao thì cái nào cũng đến tôi cả.
 
Upvote 0
Vâng cùng là tôi cả
Do ban đầu tôi đăng ký bằng email, sau này tôi đăng ký lại với tên của tôi.
Tôi cũng không biết cách nào để nhập lại. Dù sao thì cái nào cũng đến tôi cả.
Nếu đổi tên bạn có thể nhờ ban quản trị đổi tên giùm, còn 2 nick khác nhau nếu bạn muốn gộp làm 1 nick để tiện việc xem bài đăng của mình thì cũng có thể nhờ ban quản trị. Thân!
 
Upvote 0
1 case study tham khảo tốt cho ngành nhân sự. Em spam tí để mai mốt lục cho dễ. Cám ơn mấy anh
 
Upvote 0
Web KT
Back
Top Bottom