HKNHKN
HKNHKN
Thảo luận 5 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 3055 lượt xem

Tại sao xảy ra lỗi "object variable or with block variable not set" khi chạy đoạn

Tại sao xảy ra lỗi "object variable or with block variable not set" khi chạy đoạn chương trình:

Sub ChuyenDuLieuLossTree()

Worksheets("Loss Tree").Unprotect

'Xoa cac vung du lieu cu o bang Loss Tree
Sheets("Loss Tree").Range("C13:E25").ClearContents
Sheets("Loss Tree").Range("C28:E37").ClearContents
Sheets("Loss Tree").Range("C40:E115").ClearContents

'Copy Exluded
Sheets("Temporary").ListObjects("Ex_Event").DataBodyRange.Copy "Bi loi "object variable or with block variable not set""
Sheets("Loss Tree").Range("C13").PasteSpecial xlPasteValues

'Copy Planned
Sheets("Temporary").ListObjects("Pl_Event").DataBodyRange.Copy
Sheets("Loss Tree").Range("C28").PasteSpecial xlPasteValues

'Copy Unplanned
Sheets("Temporary").ListObjects("Up_Event").DataBodyRange.Copy
Sheets("Loss Tree").Range("C40").PasteSpecial xlPasteValues

Worksheets("Loss Tree").Protect

End Sub
Thảo luận 5 câu trả lời
Lượt xem 3055 lượt xem
Vỗ tay vỗ tay
HKNHKN 09:07 - Jul 25, 2020
Chào bạn bạn vui lòng đẩy file lên nhé.
Vỗ tay vỗ tay
HKNHKN 12:07 - Jul 25, 2020
Thầy vui lòng lấy file theo đường link:
https://drive.google.com/drive/folder...
Vỗ tay vỗ tay
HKNHKN 22:07 - Jul 25, 2020
Chào bạn bạn vui lòng chia sẻ file giúp mình
Vỗ tay vỗ tay
HKNHKN 12:07 - Jul 27, 2020
HKNHKN 14:07 - Jul 27, 2020
Có 1 số vấn đề trong code của bạn như sau:
1. Không dùng ListObjects mà dùng range. Khi đã có name cụ thể cho vùng range rồi thì bạn dùng theo Name vẫn đảm bảo độ co dãn của vùng. (Nếu tìm hiểu nâng cao hơn thì dùng mảng sẽ nhanh hơn range)
2. Cách ẩn/hiện dòng trống của bạn chưa tốt lắm. Mình có thêm code ẩn hiện dọng để bạn tham khảo bên dưới.
Cách copy/paste mình thấy tốc độ chưa nhanh (không nên dùng cách này, vì phải thông qua bộ nhớ excel dành cho việc copy). Ngoài ra code ẩn dòng cũng sẽ làm tốc độ chạy code bị chậm 1 chút (dùng vòng lặp for) => bạn tìm hiểu vòng lặp Do-While để chạy nhanh hơn nhé.
Code mẫu tham khảo:
Sub ChuyenDuLieuLossTree()

Dim range_ExEvent As Range, range_Pl_Event As Range, range_Up_Event As Range
Set range_ExEvent = ThisWorkbook.Worksheets("Temporary").Range("Ex_Event")
Set range_Pl_Event = ThisWorkbook.Worksheets("Temporary").Range("Pl_Event")
Set range_Up_Event = ThisWorkbook.Worksheets("Temporary").Range("Up_Event")
With Worksheets("Loss Tree")
.Unprotect
'Bo an dong
.Range("C13:C115").EntireRow.Hidden = False
'Xoa cac vung du lieu cu o bang Loss Tree
.Range("C13:E25, C28:E37, C40:E115").ClearContents
'Copy Exluded
range_ExEvent.Copy
.Range("C13").PasteSpecial xlPasteValues
'Copy Planned
range_Pl_Event.Copy
.Range("C28").PasteSpecial xlPasteValues
'Copy Unplanned
range_Up_Event.Copy
.Range("C40").PasteSpecial xlPasteValues

Application.CutCopyMode = False

'An cac dong trong
Dim i As Long
For i = 13 To 115
If .Range("C" & i).Value = "" Then
.Range("C" & i).EntireRow.Hidden = True
End If
Next i

.Protect
End With

'Lam sach cac bien doi tuong
Set range_ExEvent = Nothing
Set range_Pl_Event = Nothing
Set range_Up_Event = Nothing
End Sub
Vỗ tay vỗ tay
Câu hỏi liên quan
© 2020 - Bản quyền của Công Ty Cổ Phần Công Nghệ Giáo Dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở Kế hoạch và Đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ Thông tin và Truyền thông