Vẫn lỗi khó hiểu khi copy sheet

Liên hệ QC

PhanTuHuong

VBA & VB.NET for Excel & AutoCad
Thành viên danh dự
Tham gia
13/6/06
Bài viết
7,181
Được thích
24,625
Tôi dùng macro để copy sheet trong workbook.

Khi bảng tinh không có gì thì có thể copy đến vài trăm bản khi dùng dòng lệnh For Next, code thì rất đơn giản nên miễn bàn.

Tuy nhiên cứ cái gì liên quan đến công việc thì chỉ được vài chục bản là lại báo lỗi (như đã có lần để cập). Khi đó copy thủ công hay VBA cũng chịu cứng.

Tôi gửi file lên nhờ các thành viên Test hộ xem có bị như vậy không để tôi có hướng giải quyết (có sẵn macro copy sheet ở trong rồi).
Chú ý nói rõ office 2000, 2003 hay 2007 nhé!

Xin cám ơn!
 

File đính kèm

Đúng là rất lạ!

Cũng SUB đó, nếu mang qua File khác dù có dữ liệu hay không thì vẫn chạy ngon lành!!
Nếu chạy trên File của bác thì đến i = 57 thì dừng, lúc đó thì làm bằng tay hay VBA đều không chạy nữa. Nhưng nếu lưu và đóng lại thì chạy thêm được 30 sheet nữa, rồi lại kẹt cứng, rồi lại lưu và đóng lại . . . híc.

Nó báo cái lỗi liên qua đến Class, mà cái này thì em chịu không biết gì cả. Cái MatCat.dll của bác em đã remove (bỏ MISSING), thế mà cũng không được.

Hay bác có khai báo gì trong registry ???

Thân!
 
Thử thuốc lên người bệnh:
Chào Anh,
Tôi thử bằng code trong Excel 2003 được 56 sheet mới
Thử bằng ASAP - Sheets - Add sheet with names defined in selected cells
Cũng chỉ đúng 56 sheets

Nhưng copy code qua 1 file mới có 1 sheet có chứa dữ liệu, thì ngon lành.

Vậy anh đoán bệnh tiếp.
 
Cũng lạ thật, không biết lỗi từ đâu nhưng mình copy 2 Sheet Goc và K1 sang 1 File khác và cũng chạy codes đó thì nó chạy luôn 1 lèo. Không hiểu luôn, hi hi

TDN
 

File đính kèm

Em cũng đã kiểm tra nó vẫn bị lỗi ! Có khi nào là do virus tạo thêm code trong đó hay không?
 
Cám ơn mọi người đã quan tâm.
Đúng là chịu không hiểu nổi, một số bảng tính liên quan đến copy sheet bằng macro cũng bị như vậy (copy thủ công thì vô tư). Nếu là virus thì chắc chưa phần mềm nào biết và diệt được.

File của anh tedaynui không mở được, không hiểu dùng Office đời gì?
 
Lần chỉnh sửa cuối:
File của bác tedaynui chạy tốt mà! Theo em thì do file bị lỗi thôi vì dung lượng của 2 file hoàn toàn khác nhau. File of tedaynui: 199,168KB File of PhanTuHuong: 189,952KB Em phân tích bằng Hex Editor thấy có rất nhiều điểm khác biệt lớn từ trong cấu trúc dữ liệu file. Không biết đây có thể là lý do không nhỉ? File của bác tedaynui là file chạy trên Excel 2003. Em nghĩ bác nên nén với định dạng *.rar thì mọi người có thể dễ dàng tải về máy mà không bị lỗi! (Ý kiến riêng thôi!)
 

File đính kèm

Lần chỉnh sửa cuối:
File của bạn Boong up lên chạy rất ổn, thế mới lạ chứ. Nhưng khi xoá các sheet khi chạy xong và thực hiện lại, lỗi copy đến 56 sheet lại xuất hiện. !$@!! !$@!! !$@!! !$@!! !$@!! !$@!! !$@!!

Không hiểu có phải do lỗi hệ thống của Excel không?
 
Lần chỉnh sửa cuối:
Mấy cái liên quan đến Class thì nên nhờ bác Tuân và bác Duyệt xem ??? Để biết rằng tại sao như vậy.

Lỡ khi gửi chương trình cho người khác dùng mà bị lỗi đó thì chắc chỉ biết than . . . trời!!

To Boong : Đến thời hiện tại, tất cả các chương trình nén và xả nén thông dụng như WinRar, WinZip, 7Zip . . đều hỗ trợ qua lại với nhau. Nếu bác nào chưa thấy hỗ trợ thì vào Option để chỉnh lại.

File của tedaynui vẫn tốt mà.


Thân!
 
Em đã kiểm tra và thấy chạy được trong các trường hợp sau:
+ Trên Excel 2007
+ Copy vùng dữ liệu của các sheet (Goc,K1) trong file cũ sang file mới (không phải là copy cả sheet), cho chạy thủ tục copy trên file mới.

Theo nhận định của em thì đây là hạn chế trong xử lý Object.Copy trong Excel các phiên bản trước đây (<2007).
 
TuanVNUNI đã viết:
Em đã kiểm tra và thấy chạy được trong các trường hợp sau:
+ Trên Excel 2007
+ Copy vùng dữ liệu của các sheet (Goc,K1) trong file cũ sang file mới (không phải là copy cả sheet), cho chạy thủ tục copy trên file mới.

Theo nhận định của em thì đây là hạn chế trong xử lý Object.Copy trong Excel các phiên bản trước đây (<2007).


Hạn chế là như thế nào, bởi khi dùng trên file khác thì không thành vấn đề.

Mong được kiến giải nhiều hơn!
Vậy thì tại sao nhỉ ???

Thân!
 
Mr Okebab đã viết:
Hạn chế là như thế nào, bởi khi dùng trên file khác thì không thành vấn đề.

Mong được kiến giải nhiều hơn!
Vậy thì tại sao nhỉ ???

Thân!

Nếu copy toàn bộ sheet sang file mới (Move or Copy...) thì lỗi như bình thường. Nếu chỉ copy một vùng chứa dữ liệu thôi thì không sao. Với Excel 2007 thì không sao, rất có thể Microsoft đã tiến hành sửa các lỗi cũ của Excel các phiên bản trước đây. Lỗi là vì sao thì chắc phải xem và debug mã nguồn của Excel thôi +-+-+-+ .
 
TuanVNUNI đã viết:
Nếu copy toàn bộ sheet sang file mới (Move or Copy...) thì lỗi như bình thường. Nếu chỉ copy một vùng chứa dữ liệu thôi thì không sao. Với Excel 2007 thì không sao, rất có thể Microsoft đã tiến hành sửa các lỗi cũ của Excel các phiên bản trước đây. Lỗi là vì sao thì chắc phải xem và debug mã nguồn của Excel thôi +-+-+-+ .
Cái này chưa chắc... Tôi copy toàn bộ file thầy Hướng sang hẳn 1 file mới... Là "toàn bộ" nha, ko chừa em nào cả, cũng ko sửa tí gì cả... thì code chạy bình thường... Tôi dùng Excel2003
ANH TUẤN
 
Đúng như anh Tuấn nói đấy bác Tuân à, mình cũng dùng MO 2003 và Copy Sheet (nguyên sheet) sang file khác thì chạy ngon ơ.

Còn để nguyên File của bác hướng thì các bạn bị lỗi khi i=57, còn mình thì luôn bị lỗi khi i=181. Mình cũng thử Unhide dòng cột và xoá dòng cột thừa nhưng vẫn bị lỗi khi i=181 ????

Thiệt không hiểu nổi
TDN
 
Còn tôi thì ngay từ đầu chạy file của thầy Hướng đã lổi:
Mã:
[I][B]Compile error:
Can't find project or library
[/B][/I]ANH TUẤN
 
anhtuan1066 đã viết:
Còn tôi thì ngay từ đầu chạy file của thầy Hướng đã lổi:
Mã:
[I][B]Compile error:
Can't find project or library
[/B][/I]ANH TUẤN


Cái này bác chỉ cần remove Matcat.dll trong thư viện thôi, không ảnh hưởng gì đến copy sheet.
 
Đúng là phương thức copy sheet của Excel các phiên bản trước 2007 có lỗi trong 1 lần mở Workbook (tối đa chỉ được dùng phương thức copy 256 lần) --> sau đó nếu muốn sử dụng thì cần phải đóng workbook và mở lại. (xem link bác concua vừa gửi sẽ rõ).

Em đã thử nếu dùng phương thức Add sheet và sau đó chép template sang thì sẽ không bị giới hạn nữa.

Thanh Phong
 
Đúng là hạn chế của Excel 2003 trở về trước, tôi sẽ nghiên cứu và phản hồi lại.
 
PhanTuHuong đã viết:
Đúng là hạn chế của Excel 2003 trở về trước, tôi sẽ nghiên cứu và phản hồi lại.
Tôi đã thử chạy ThemSheet trên Excel 2003, khi chạy nó ghi số sheet đã copy vào A1, và cứ 100 sheet thì lưu lại. Nhờ đó tôi đã xem được kết quả và đã tạo đến 500 sheet ! Có thể còn thêm nữa nhưng bắt đầu chậm nên tội dừng. Và rút ra nhận xét:
- Excel 2003 Không giới hạn số sheet là 256. Tối đa chưa biết.
- Sheet gốc trong ví dụ là sheet không có dữ liệu, sheet và module có kích thước là 60K. Khi copy đến 500 sheet lên đến 900K.
Tôi nghĩ tập tin của PhanTuHuong không thể copy nhiều sheet là do kích thước tập tin tăng quá cao, ngoài khả năng của bộ nhớ.
PhanTuHuong thử tính xem, chỉ có 1 sheet mà đến 180K (190K-10K tập tin không có dữ liệu), nó copy đến 100 sheet thì đến 18.000K = 18M thì bộ nhớ nào chịu nổi ?

Mã:
Sub ThemSheet()
i = 1
Do
  ThisWorkbook.Sheets(1).Copy After:=ThisWorkbook.Sheets(1)
  Sheets(1).Cells(1, 1) = i
  If i Mod 100 = 0 Then ThisWorkbook.Save
  i = i + 1
Loop
End Sub
 

File đính kèm

Web KT

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

Back
Top Bottom