2009-05-28 28 views
5

Chúng tôi có nhiều báo cáo được tạo thông qua VBA & Excel. Chỉ một tỷ lệ nhỏ các báo cáo là tính toán thực tế - phần lớn công việc là các cuộc gọi sql và định dạng/ghi các ô. Dài nhất trong số đó mất vài giờ, phần lớn mất khoảng 20-30 phút mỗi.Trình biên tập VB6/VBA miễn phí và thực hành Excel tốt nhất

Mã VBA/Excel cắm vào một dll mà các ứng dụng máy tính để bàn VB6 sử dụng - nó ở đây là tất cả các cuộc gọi sql được thực hiện. Trong khi tôi chắc chắn rằng có chỗ để cải thiện ở đây, nó không phải là điều này liên quan đến tôi - các ứng dụng máy tính để bàn khá linh hoạt.

Hai chức năng VBA được sử dụng trong sự phong phú: Chúng được gọi là GetRange và SetupCell và chúng gần như luôn xuất hiện cùng nhau. Hàm GetRange là một trình bao bọc cho đối tượng Excel.Range. Phải mất một trang tính và 4 giá trị cho phạm vi của phạm vi. Sử dụng chính của nó là chọn ô để chỉnh sửa. Dường như không có nhiều cơ hội để chọn nó, nhưng đó có phải là cách tốt nhất không?

Đối tác của nó là SetupCell. Điều này có một đối tượng Excel.Range, văn bản và một tá tham số về ô (phông chữ, đường viền, vv). Hầu hết các tham số này là tùy chọn boolean nhưng một lần nữa, nó có vẻ rất lãng phí. Một số trong số này có thể được thiết lập sau khi chết nhưng một số phụ thuộc vào các giá trị chứa trong tế bào.

Có khá nhiều mã chứa trong các chức năng này, chủ yếu là nếu báo cáo và công việc sẽ không đánh giá cao việc tôi đăng nó.

Tôi đoán tôi đã có hai câu hỏi: Có cách nào tốt hơn và đó là những gìlà có hồ sơ miễn phí mà tôi có thể sử dụng để xem nếu phần lớn thời gian là ở đây hoặc trong dll?

Trả lời

3

Bạn có nghĩ đến việc sử dụng giải pháp báo cáo thực tế không? Db phụ trợ của bạn là gì? Nếu bạn đang sử dụng MSSQL 2000 hoặc cao hơn có một giải pháp báo cáo khá phong nha, bạn có thể sử dụng miễn phí. SQL Server Reporting Services.

Có vẻ như các báo cáo đang chi tiêu hầu hết các ô định dạng thời gian của chúng. Điều này có thể là lý do tại sao các báo cáo có vẻ quá chậm và ứng dụng dành cho máy tính để bàn thì không.

Ngoài ra, nếu bạn biết định dạng trước và nó khá tĩnh, bạn có thể định dạng trước các trang tính để cắt giảm một số công việc.

Tôi cũng sẽ ném điều này vào đó. Hầu hết các giải pháp báo cáo sẽ cho phép định dạng có điều kiện và như vậy, nhưng kể từ khi chúng được thiết kế để làm việc như hiệu suất như vậy sẽ tốt hơn nhiều so với Excel có làm điều đó.

+0

Không dễ dàng như vậy. Báo cáo cần phải có độ dài khác nhau, một số ô cần phải được tô màu tùy thuộc vào giá trị trong ô (hoặc tổng của các ô). –

+0

SSRS sẽ có thể đối phó với hầu hết mọi thứ bạn ném vào nó - tôi thứ hai câu trả lời này. –

3

Đây không phải là đề xuất hồ sơ, nhưng đó là gợi ý để tăng tốc các macro Excel đang dành thời gian cập nhật màn hình. Tôi đã có kết quả xuất sắc bằng cách tắt cập nhật màn hình trong khi macro đang chạy: đặt Application.ScreenUpdating = False và also using a number of other similar settings. Chỉ cần chắc chắn bật lại chúng khi macro kết thúc: P

+0

Chúng tôi đã làm điều này và chúng tôi thiết lập Application.Calculation để hướng dẫn sử dụng (xlCalculationManual). –

1

Nó không miễn phí nhưng bạn có thể cấu hình với điều này. Tôi nghi ngờ bản trình diễn sẽ phù hợp với nhu cầu của bạn: http://www.aivosto.com/vbwatch.html

+0

Đối với một số báo cáo, vâng. Đối với những người khác, không. Đối với mỗi trang tính, chúng tôi có tệp 'vba', cộng với một số tệp 'hỗ trợ'. Nó chắc chắn sẽ không hoạt động trên dll vì nó có hơn 100 trăm lớp và mô-đun. –

6

vài giờ là vô lý đối với báo cáo.

Nếu vấn đề là VBA mua "Phát triển Excel chuyên nghiệp" (stephen Bullen, Rob Bovey và cộng sự): điều này có một hồ sơ VBA miễn phí được gọi là PerfMon.

Nếu vấn đề là Excel tính toán thấy http://msdn.microsoft.com/en-us/library/aa730921.aspx?ppud=4

Nhưng tôi sẽ đoán rằng vấn đề là chi phí cao kết hợp với tham khảo điều ô-by-cell: bạn nên luôn luôn làm việc trong khối lượng lớn các tế bào cùng một lúc.

+0

Đẹp pimpage cho chính mình :-) Nghiêm túc mặc dù vấn đề không phải là với tính toán - chúng tôi làm rất ít tính toán (excel hay cách khác). Một trình lược tả sẽ giúp xác định xem các cuộc gọi đến db có làm chết hệ thống hoặc định dạng ô theo từng ô chậm hay không. Làm thế nào bạn có thể làm việc với một khối lượng lớn các tế bào tại một thời điểm? –

+2

Nếu bạn không muốn sử dụng PerfMon của Stephen Bullen thì tại sao không chỉ thêm một số mã thời gian bằng cách sử dụng bộ đếm thời gian windows-res cao? thực hiện các công việc theo khối: cách tiếp cận cơ bản là chỉ định phạm vi cho biến thể: Dim vArr dưới dạng biến thể vArr = Phạm vi ("B4: z456") value2 điều này sẽ cung cấp cho bạn biến thể chứa 2-d array Bạn có thể thao tác mảng và gửi nó trở lại excel Phạm vi ("B4: z456") = vArr tương tự khi định dạng ô định dạng phạm vi ô (có thể sử dụng sao chép/dán trước từ bảng mẫu) thay vì một ô. v.v. –

0

Có vẻ như mã VBA (hoặc mã VB viết cho trang tính) đang thực hiện theo từng dòng, điều này có thể mất độ tuổi và thiết kế kém. Viết vào Excel dưới dạng biến thể trong một lần. Định dạng trang tính sau khi dữ liệu được nhập tất cả. Cảm ơn Ross

Các vấn đề liên quan