Giảm dung lượng file và tăng tốc độ xử lý

Liên hệ QC

yeudoi

Thành viên gắn bó
Thành viên BQT
Moderator
Tham gia
12/6/06
Bài viết
3,167
Được thích
7,608
Xin chào tất cả các thành viên.
Hiện nay tôi thấy việc tạo một chương trình cá nhân trên excel có một số nhược điểm như sau:
- Làm dung lượng file lớn khi có nhiều công thức phức tạp
- Việc đóng mở và lưu dữ liệu thực hiện rất lâu khi file có dung lượng lớn
- Tính bảo mật kém
- Dễ bị chương trình quét Virus phá các macro
...
Nhưng chúng ta phải thấy rằng excel có nhiều ưu điểm như mọi người đã biết, ở đây tôi muốn đề cập đến việc làm sao hạn chế được những nhược điểm của excel mà thôi. Tôi nêu ra một số cách mà tôi thường làm để mọi người có thể tham khảo:
- Nếu có thể được chuyển toàn bộ công thức thành code trong VBA và khi nhập công thức xong thì chuyển nó về giá trị ( Value)
VD:
A1=Sum("A1:A65536")
thành
Range("A1").value = "=Sum(("A1:A65536")"
Range("A1").value = Range("A1").value
- Trong việc bố trí CSDL thì phân thành nhiều file ( việc này làm giảm đáng kể dung lượng file và tất nhiên việc đóng mở và lưu sẽ rất nhanh)
Trong đó:
+ Một file là chương trình chính chứa các macro, form và các biểu mẫu tổng hợp và báo cáo
+ Một file chứa các Data như Danh mục sản phẩm, danh mục khách hàng, danh mục nhân viên...Nói chung là ít thay đổi
+ Một file chứa dữ liệu dùng để nhập liệu hàng ngày ( có thể vài file dùng để chứa dữ liệu cũng được nếu các dữ liệu này ít liên quan với nhau. VD: bảng lương, Kế hoạch..)
+ Tạo một file .xla dùng để chứa các macro dung chung cho các file VD: dịch số...Khi đó chúng ta dùng Tools/references để cộng file .xla vào và như vậy nó có thể chạy trong file nào mình add vào
Như vậy khi mở chúng ta sẽ mở tất cả các file và khi đóng thì chỉ cần đóng những file nào làm việc và như vậy file chính không cần phải lưu nó xem như một file chương trình.
- Cuối cùng chúng ta chuyển file chính sang exe xem như file chạy
Trên đây là những ý kiến của riêng tôi để làm giảm dung lượng file và cải thiện tốc độ. Mong mọi người đóng góp thêm và xem đây như một mục nhằm thảo luận làm sao ngày càng phát huy hơn nữa những lợi ích của excel cho những người không chuyên.
 
Xin chào tất cả các thành viên.
Hiện nay tôi thấy việc tạo một chương trình cá nhân trên excel có một số nhược điểm như sau:
- Làm dung lượng file lớn khi có nhiều công thức phức tạp
- Việc đóng mở và lưu dữ liệu thực hiện rất lâu khi file có dung lượng lớn
- Tính bảo mật kém
- Dễ bị chương trình quét Virus phá các macro
...
- Nếu có thể được chuyển toàn bộ công thức thành code trong VBA và khi nhập công thức xong thì chuyển nó về giá trị ( Value)
VD:
Trích:
Mã:
A1=Sum("A1:A65536")
 thành
 Range("A1").value = "=Sum(("A1:A65536")"
 Range("A1").value = Range("A1").value
Trên đây là những ý kiến của riêng tôi để làm giảm dung lượng file và cải thiện tốc độ. Mong mọi người đóng góp thêm và xem đây như một mục nhằm thảo luận làm sao ngày càng phát huy hơn nữa những lợi ích của excel cho những người không chuyên.

Tương tự trường hợp này, một lần tình cờ tôi viết thiếu .value của vế phải nhưng kết quả vẫn đúng
Mã:
Range("A1").value = "=Sum(("A1:A65536")"
Range("A1").value = Range("A1")       [SIZE=2][COLOR=Red][I](bỏ .value vế phải)[/I][/COLOR][/SIZE]
hoặc [A1].value = [A1]
Vậy cho hỏi khi (bỏ .value vế phải) có gì sai không, Tại sao ?
 
Tương tự trường hợp này, một lần tình cờ tôi viết thiếu .value của vế phải nhưng kết quả vẫn đúng
Mã:
Range("A1").value = "=Sum(("A1:A65536")"
Range("A1").value = Range("A1")       [SIZE=2][COLOR=Red][I](bỏ .value vế phải)[/I][/COLOR][/SIZE]
hoặc [A1].value = [A1]
Vậy cho hỏi khi (bỏ .value vế phải) có gì sai không, Tại sao ?

Vẫn không sai bạn ah
 
Tương tự trường hợp này, một lần tình cờ tôi viết thiếu .value của vế phải nhưng kết quả vẫn đúng
Mã:
Range("A1").value = "=Sum(("A1:A65536")"
Range("A1").value = Range("A1")
Vậy cho hỏi khi (bỏ .value vế phải) có gì sai không, Tại sao ?
Một số đối tượng có thuộc tính mặc định là Value. Trong trượng hợp này thì vẫn đúng. Tuy nhiên, nếu Range là 1 vùng thì buộc phải có .Value
Ví dụ : phải là Range("B1:B5").Value = Range("A1:A5").Value

Một số trường hợp tương tự :

Range("A1").Value = Combobox1.Value
Có thể viết là :
Range("A1") = Combobox1

PHP:
If Checkbox1.Value = True then 
       Checkbox2.Enable = False
else
       Checkbox2.Enable = True
End if
Có thể viết là :
Checkbox2.Enable = Not Checkbox1

TDN
 
Lần chỉnh sửa cuối:
Tương tự trường hợp này, một lần tình cờ tôi viết thiếu .value của vế phải nhưng kết quả vẫn đúng
Mã:
Range("A1").value = "=Sum(("A1:A65536")"
Range("A1").value = Range("A1")       [SIZE=2][COLOR=Red][I](bỏ .value vế phải)[/I][/COLOR][/SIZE]
hoặc [A1].value = [A1]
Vậy cho hỏi khi (bỏ .value vế phải) có gì sai không, Tại sao ?

Value là một thuộc tính mặc định của Range.
Vì vậy khi không có gì thì VBA sẽ coi như đó là thuộc tính mặc định

Thân!
 
Tiếp theo nội dung của bác yeudoi

Một cách khác :
Khi mở File, ta cho Calculation Option thành Manual (Application.Calculation = xlCalculationManual). Như vậy, khi cần cập nhật số liệu ta có thể dùng các lệnh sau :
ActiveSheet.Calculate
Hoặc
Sheet1.Calculate
Hoặc
Sheet1.Range("A1:D20").Calculate
Và Khi đóng File, ta chuyển Calculation Option thành Automatic (Application.Calculation = xlCalculationAutomatic)

TDN
 
Theo em thì nếu dùng Calcualte mà có công thức trong bảng tính thì sẽ rất bất tiện cho người dùng. Vì khi thay đổi dữ liệu nguồn thì nó không tự thay đổi dữ liệu trong bảng tính.
Và em cũng ít khi đặt chế độ Manual. Vì nếu dùng công thức thì không nên rồi. Còn nếu dùng VBA thì cũng chẳng cần đụng đến nó chi cho mệt vì Code của mình đã tính và lấy Value ra Cell rồi.
Em chỉ xài nó khi mấy file mà bảo là chạy chậm quá chừng.... Hiii
Còn nếu muốn xử lý dữ liệu nhanh nhẹ thì nên dùng tất cả bằng VBA và sử dụng Worksheet_SelectionChange để làm tăng tính năng tự động cho bảng tính. Vậy bảng tính sẽ giống như 1 trang chỉ lưu trữ dữ liệu thôi. Và mọi việc sẽ được đẩy nhanh mà không buộc Excel phải Automatic toàn bộ bảng tính. Vì chỉ những dòng dữ liệu cần thiết mới thay đổi thôi.
Thân.
 
Ở đây, chúng ta cứ đưa ra các biện pháp để các bạn thuận tiện lựa chọn cách nào phù hợp với các ứng dụng của mình.

Tuy nhiên, không phải lúc nào cũng áp dụng VBA 1 cách thuận tiện. Có những trường hợp mình nghĩ dùng công thức sẽ "dễ chịu" hơn; hoặc khi có sự thay đổi, chỉnh lí gì đó thì người dùng cũng có thể tự chỉnh công thức cho vừa ý. Nếu dùng VBA thì mỗi sự thay đổi lớn hay nhỏ cũng cần phải có tác giả "ra tay"

Nếu tất cả đều dùng VBA, có lẽ mình không chọn Excel. Hi hi

TDN
 
Lần chỉnh sửa cuối:
Bạn YEUDOI thân mến
Đề tài bạn đề cập mình rất cần , trước đây cũng đã làm nhưng chưa ổn vì mỗi lần phải mở hết các file . Cách của bạn mình chưa hiểu lắm . Nếu được bạn cho 1 ví dụ đơn giản để học hỏi thêm .
Cảm ơn nhiều .
 
Chào các bạn !
Tại bài 3 Tôi có hỏi: khi viết câu lệnh lấy giá trị, nếu bỏ .value vế phải có gì sai không, Tại sao ?
ví dụ viết: Range("A1").value = Range("A1").value thành Range("A1").value = Range("A1")
và Tôi đã nhận được một số bài giải thích ở trên, mặc dù các bài giải thích đều có cơ sở thuyết phục nhưng tôi vẫn băn khoăn vậy tại sao người ta lại viết .value vào vế phải ?

Hôm nay tôi xem lại bài và nhận thấy hình như 2 cách viết trên không hoàn toàn không giống nhau bởi:
với cách 1: Range("A1").value = Range("A1").value kết quả trả về là giá trị kiểu Number
với cách 2: Range("A1").value = Range("A1") kết quả trả về là giá trị kiểu Text

Không biết có đúng như vậy không ?
 
Web KT
Back
Top Bottom