Bị lỗi Application-defined or object-defined error (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

nguyentheanh2111

Thành viên mới
Tham gia
21/11/11
Bài viết
15
Được thích
0
Các bác coi dùm em cái code copy em viết để chuyển dữ liệu từ dạng pivot sang dạng từng trường thông tin
Trong file em để 2 code, 1 code chạy không được và báo lỗi như trên, còn 1 code chạy đúng nhưng phải nhập số cho giá trị Resize, mà cái này rất bất tiện,
Thêm một chỗ nữa là chỗ Dim ARR em phải thêm giá trị kích thước cho mảng này, nếu không thì nó cũng báo lỗi
Mong các bác chỉ em cách khắc phục
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn nói thế nào chứ cả 2 code đều chạy được và kết quả như nhau.
 
Upvote 0
Các bác coi dùm em cái code copy em viết để chuyển dữ liệu từ dạng pivot sang dạng từng trường thông tin
Trong file em để 2 code, 1 code chạy không được và báo lỗi như trên, còn 1 code chạy đúng nhưng phải nhập số cho giá trị Resize, mà cái này rất bất tiện,
Thêm một chỗ nữa là chỗ Dim ARR em phải thêm giá trị kích thước cho mảng này, nếu không thì nó cũng báo lỗi
Mong các bác chỉ em cách khắc phục
1) Code chạy đâu thấy báo lỗi gì
2) nhưng phải nhập số cho giá trị Resize, mà cái này rất bất tiện,...
Thì khai báo vào vung dữ liệu của biến sArray
Thêm một chỗ nữa là chỗ Dim ARR em phải thêm giá trị kích thước cho mảng này, nếu không thì nó cũng báo lỗi
Chỗ này bắt buộc phải khai báo, nhưng nhìn trong bài thấy bạn lấy từ cột thứ tư, ta có số dòng kết quả 3*số dòng của biến sArray_ Nếu số cột là cố định ta có số 3, nếu cột không cố định ta có "(số cột - 3)*số dòng của biến sArray"
Đại khái code sửa lại tý tẹo chỗ khai báo và gán giá trị cho biến
Mã:
Sub copycat123()
    Dim Arr, sArray, i As Long, j As Long, z As Long, iCot
[B]    iCot = Range([A2], [BX2].End(xlToLeft)).Columns.Count[/B]
[B]    sArray = Range([A2], [A5000].End(xlUp)).Resize(, iCot)[/B]
   [B] ReDim Arr(1 To (iCot - 3) * UBound(sArray), 1 To 5)[/B]
        For j = 4 To UBound(sArray, 2)
            For i = 2 To UBound(sArray, 1)
                z = z + 1
                Arr(z, 1) = "PCBD"
                Arr(z, 2) = 201610
                Arr(z, 3) = sArray(i, 1)
                Arr(z, 4) = sArray(1, j)
                Arr(z, 5) = sArray(i, j)
            Next
        Next
    Worksheets("Hehehe").Range("E1").Resize(z, 5).Value = Arr
End Sub
 
Upvote 0
1) Code chạy đâu thấy báo lỗi gì

Thì khai báo vào vung dữ liệu của biến sArray

Chỗ này bắt buộc phải khai báo, nhưng nhìn trong bài thấy bạn lấy từ cột thứ tư, ta có số dòng kết quả 3*số dòng của biến sArray_ Nếu số cột là cố định ta có số 3, nếu cột không cố định ta có "(số cột - 3)*số dòng của biến sArray"
Đại khái code sửa lại tý tẹo chỗ khai báo và gán giá trị cho biến
Mã:
Sub copycat123()
    Dim Arr, sArray, i As Long, j As Long, z As Long, iCot
[B]    iCot = Range([A2], [BX2].End(xlToLeft)).Columns.Count[/B]
[B]    sArray = Range([A2], [A5000].End(xlUp)).Resize(, iCot)[/B]
   [B] ReDim Arr(1 To (iCot - 3) * UBound(sArray), 1 To 5)[/B]
        For j = 4 To UBound(sArray, 2)
            For i = 2 To UBound(sArray, 1)
                z = z + 1
                Arr(z, 1) = "PCBD"
                Arr(z, 2) = 201610
                Arr(z, 3) = sArray(i, 1)
                Arr(z, 4) = sArray(1, j)
                Arr(z, 5) = sArray(i, j)
            Next
        Next
    Worksheets("Hehehe").Range("E1").Resize(z, 5).Value = Arr
End Sub
Thanks bác, hồi chiều em chạy nó cứ báo lỗi mà giờ chạy lại nó không báo lỗi gì hết, em cũng hơi khó hiểu **~**
Vụ Dim Arr em không muốn khai báo kích thước số dòng của nó tại em không chỉ lấy dữ liệu từ 1 sheet "BD" mà còn lấy ở 4 sheet nữa, dữ liệu trình bày cũng tương tự như sheet "BD" vậy, nên em thấy ko thể biết trước được,
Vậy mình khai báo dư dả hẳn 1tr dòng rồi khi gom xong dữ liệu mình Redim lại có ổn không
 
Upvote 0
Thanks bác, hồi chiều em chạy nó cứ báo lỗi mà giờ chạy lại nó không báo lỗi gì hết, em cũng hơi khó hiểu **~**
Vụ Dim Arr em không muốn khai báo kích thước số dòng của nó tại em không chỉ lấy dữ liệu từ 1 sheet "BD" mà còn lấy ở 4 sheet nữa, dữ liệu trình bày cũng tương tự như sheet "BD" vậy, nên em thấy ko thể biết trước được,
Vậy mình khai báo dư dả hẳn 1tr dòng rồi khi gom xong dữ liệu mình Redim lại có ổn không
Bạn khai báo biến Arr trước bao nhiêu dòng (miễn là dư) cũng được không cần REDIM (thật ra nhiều sheet mà mình muốn tính nó cũng được thôi, nhưng không quan trọng lắm, có điều, để 1 triệu dòng có vẻ như mình không quản được dữ liệu của...chính mình), khi gán kết quả bạn resize theo số vòng lặp tức là thằng "z" ở trong bài như bạn làm là Ok, đừng quan tâm tới nó
Thân
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom