Tôi dựa vào kinh nghiệm từ bản thân mình viết nên topic này. Tôi dựa vào quan điểm, lấy quy mô dữ liệu làm thước đo, vì vậy không thể tránh khỏi khác biệt cách nghĩ đối với mọi người.
Dù là quy mô dữ liệu ra sao, thì các kiến thức nền tảng không bao giờ là thừa. Dù là quy mô dữ liêu ra sao, thì thiết kế trước khi code bao giờ cũng là thói quen tốt.
Nhưng thực tế như ta thấy, nếu chỉ code cỡ 100 dòng, hiếm có ai thiết kế trước khi code. Do đó, dựa trên thực tế trải nghiệm của bản thân, ở giai đoạn nào cần cái gì, tôi viết nên topic này.
1. Đầu tiên các bạn sẽ code với sheet.
Bất cứ ai học VBA cũng sẽ đi qua bước này. Các bài hỏi đáp VBA phần lớn trên các diễn đàn ở Việt Nam cũng nằm ở giai đoạn này.
Các bạn có dữ liệu trên một sheet, và sẽ dùng macro để xử lý dữ liệu trên sheet này.
Có một rắc rối nho nhỏ với người mới học, khối lượng dữ liệu biến thiên, lúc này bạn cần tới công thức tính dòng cuối, ta vẫn thường thấy mọi người gọi nó là rend trong các đoạn code.
Cũng có người chẳng cần biết công thức tính rend là gì, data của mình giỏi lắm cỡ 50.000 dòng dữ liệu, vậy thì cứ cho chạy tới 50.000 . Lúc này các bạn mới học sẽ có thêm vốn liếng về interge và Long. Muốn chạy tới 50.000 thì phải dùng tới Long rồi. Interge chỉ chạy tới cỡ 30.000 thôi.
Code như vậy thì thiếu chuyên nghiệp nhưng không sao. Các bạn mới học nên điều đó hiểu được. Nhưng sau vài năm sau vẫn cứ code như thế thì không được.
Có người còn chẳng nhớ công thức rend là gì, cần dùng đến thì lại đi copy. Vậy hãy thử gõ nó 50 lần, sau đó kiểm tra lại xem có bao nhiêu lần gõ sai. Đó là cách luyện tập, cũng như ta học từ mới tiếng anh, ta phải viết đi viết lại nhiều lần đó thôi.
2. Sau đó các bạn sẽ làm việc với nhiều sheet dữ liệu.
Lúc này, công việc phải xử lý sẽ phức tạp hơn một chút. Bạn sẽ phải làm quen với câu lệnh Sheets("Tên_Sheet").Activate .
Muốn làm việc với sheet nào thì phải thực thi lệnh trên. Tôi ví dụ muốn lấy rend của sheet2 thì đầu tiên việc cần làm đó là bạn phải kích hoạt-Activate cái sheet2 lên.
Nhiều người có kinh nghiệm một chút thì nhanh nhảu không nên dùng lệnh này, sẽ gây cho chương trình chạy chậm. Trước hết, nói với các bạn mới học, khoan hãy nói tới việc nhanh chậm, hãy cố gắng tạo ra output chính xác cái đã.
Còn với những người có kinh nghiệm một chút, biết làm việc với mảng, tôi muốn nói với các bạn rằng, để ghi dữ liệu được ra mảng thì cũng phải xác định được cái rend của sheet đó. Và để xác định được rend một cách chính xác 100% thì phải kích hoạt sheet đó lên để tìm rend, sau đó muốn làm gì thì làm.
Workbooks("Tên_workbook").Sheets("Tên_Sheet").Activate .
Khi nhiều workbook, nhiều sheet đang làm việc, nếu không kích hoạt rõ ràng, sẽ dẫn tới lỗi có thể xảy ra khi lấy rend. Chúng ta hạn chế kích hoạt chứ không phải là KHÔNG KÍCH HOẠT. Việc hạn chế thì sẽ hạn chế nhưng khi cần thì PHẢI LÀM KHÔNG RUN TAY.
3. Làm việc với nhiều file.
Lúc này các xử lý đã bắt đầu phức tạp hơn. Một lần nữa, tôi phải nhắc lại với những bạn có chút kiến thức nhưng mồm miệng thì nhanh nhảu, chúng ta một lần nữa phải sử dụng lệnh kích hoạt-Activate một cách không run tay. Bạn có thể hạn chế sử dụng với số lần ít nhất, chứ không được nói TÔI SẼ TUYỆT ĐỐi KHÔNG DÙNG.
Như tôi nói ở trên, chúng ta cần phải chỉ định chính xác là làm việc với workbook nào (file excel nào) và sheet nào.
Đây sẽ là nội dung chủ yếu của xây dựng Tool-đó là làm việc với nhiều file và nhiều sheet dữ liệu. Lần đầu tôi làm chương trình như vậy cách đây đã khoảng chục năm, lúc ấy tôi chưa học thiết kế chương trình, cũng chẳng biết gì debug F8 hay F5 gì hết. Cứ chạy lỗi thì tìm và sửa.
Nghĩ lại khoảng thời gian đó, tôi cảm thấy mình đã bỏ ra công sức rất lớn. Rất nhiều tính toán xảy ra ở trong đầu. Việc hoàn thành chương trình và chạy đúng đã khiến tôi tự hào, vì mình đã xử lý thành công một khối lượng công việc khổng lồ. Nhưng nghĩ lại thì chẳng có gì tự hào cả. Mình đã không biết cách làm việc.
Từ kinh nghiệm đó, tôi thấy rằng, nếu code ở mức độ này, bạn cần học thiết kế.
Tôi từng rất sốt ruột khi cứ họp hành thảo luận, trong khi kỳ hạn thì sắp hết. Lúc đó admin tuhocvba an ủi như thế này:
-Yên tâm đi, thiết kế nên lâu. Khi đã fix thiết kế (thống nhất thiết kế) thì code nhanh lắm. Thời gian code chỉ mất khoảng 30% toàn bộ thời gian dự án.
Thiết kế nói ngắn gọn, chúng ta mô hình hóa các yêu cầu, diễn giải chúng bằng mô hình hoặc lời nói theo phương châm càng dễ hiểu càng tốt. Chúng ta liệt kê các chức năng, các thao thao tác người dùng mong muốn...
Toàn bộ những cái đó được viết ra, chúng ta không lưu giữ trong đầu nữa, nên đầu óc rất nhẹ nhàng, không phải căng ra. Mặt khác, người khác nhìn vào cũng hiểu được, nên có thể chia việc dễ dàng.
Đã bao giờ bạn code và sau một thời gian, bạn nhìn lại code của chính mình và không hiểu gì không? Việc đó không có gì là lạ, tôi cũng vậy. Nhưng nếu có bản thiết kế, cái bản thiết kế mà bất cứ ai nhìn vào cũng hiểu được ấy, bây giờ ta nhìn lại bản thiết kế ấy, chắc chắn ta sẽ hiểu ra ngay ta đã làm gì.
Việc update sửa chữa code sau này vì thế cũng thuận lợi hơn.
4. Làm việc với các ứng dụng khác.
Đó là từ Excel giao tiếp với Access, hoặc internet explorer (IE)...
Kỹ năng xử lý tính toán thì không đòi hỏi nhiều. Logic cũng không đòi hỏi cao. Tuy nhiên vì đã quen làm việc với Excel, bây giờ phải giao tiếp với ứng dụng khác,rõ ràng đó là một thách thức mới với người code VBA.
Nếu chưa một lần giao tiếp thử với IE, với Access,... bây giờ có một người nói, họ muốn code lấy dữ liệu từ web, hay lấy dữ liệu access về, vì chúng ta chưa có kinh nghiệm cho nên không dám trả lời có làm được hay không, hay là áng chừng cần bao nhiêu thời gian để làm xong. Như vậy thì vẫn chưa thể nói là trưởng thành.
Tất nhiên các bạn không thể biết hết, chẳng hạn nếu không có mối quan tâm về cad thì không code được, không có mối quan tâm về ddt2000 thì không code được,... nhưng IE và Access lại là chuyện khác, đó là thứ cơ bản mà các bạn nên một lần thử làm.
Lần đầu tiên giao tiếp với web, đó là tôi soạn sẵn bài viết trên excel rồi cho macro tự động post bài, tôi rất sung sướng.
Lần thứ hai giao tiếp với web, tôi code dạo cho người ta-kiếm chút tiền lẻ hihi.
Lần đâu tiên giao tiếp với access, đó là câu chuyện cũng rất thú vị mà có thời gian tôi sẽ viết sau.
Dù là quy mô dữ liệu ra sao, thì các kiến thức nền tảng không bao giờ là thừa. Dù là quy mô dữ liêu ra sao, thì thiết kế trước khi code bao giờ cũng là thói quen tốt.
Nhưng thực tế như ta thấy, nếu chỉ code cỡ 100 dòng, hiếm có ai thiết kế trước khi code. Do đó, dựa trên thực tế trải nghiệm của bản thân, ở giai đoạn nào cần cái gì, tôi viết nên topic này.
1. Đầu tiên các bạn sẽ code với sheet.
Bạn cần đăng nhập để thấy đính kèm
Bất cứ ai học VBA cũng sẽ đi qua bước này. Các bài hỏi đáp VBA phần lớn trên các diễn đàn ở Việt Nam cũng nằm ở giai đoạn này.
Các bạn có dữ liệu trên một sheet, và sẽ dùng macro để xử lý dữ liệu trên sheet này.
Có một rắc rối nho nhỏ với người mới học, khối lượng dữ liệu biến thiên, lúc này bạn cần tới công thức tính dòng cuối, ta vẫn thường thấy mọi người gọi nó là rend trong các đoạn code.
Cũng có người chẳng cần biết công thức tính rend là gì, data của mình giỏi lắm cỡ 50.000 dòng dữ liệu, vậy thì cứ cho chạy tới 50.000 . Lúc này các bạn mới học sẽ có thêm vốn liếng về interge và Long. Muốn chạy tới 50.000 thì phải dùng tới Long rồi. Interge chỉ chạy tới cỡ 30.000 thôi.
Code như vậy thì thiếu chuyên nghiệp nhưng không sao. Các bạn mới học nên điều đó hiểu được. Nhưng sau vài năm sau vẫn cứ code như thế thì không được.
Có người còn chẳng nhớ công thức rend là gì, cần dùng đến thì lại đi copy. Vậy hãy thử gõ nó 50 lần, sau đó kiểm tra lại xem có bao nhiêu lần gõ sai. Đó là cách luyện tập, cũng như ta học từ mới tiếng anh, ta phải viết đi viết lại nhiều lần đó thôi.
2. Sau đó các bạn sẽ làm việc với nhiều sheet dữ liệu.
Bạn cần đăng nhập để thấy đính kèm
Lúc này, công việc phải xử lý sẽ phức tạp hơn một chút. Bạn sẽ phải làm quen với câu lệnh Sheets("Tên_Sheet").Activate .
Muốn làm việc với sheet nào thì phải thực thi lệnh trên. Tôi ví dụ muốn lấy rend của sheet2 thì đầu tiên việc cần làm đó là bạn phải kích hoạt-Activate cái sheet2 lên.
Nhiều người có kinh nghiệm một chút thì nhanh nhảu không nên dùng lệnh này, sẽ gây cho chương trình chạy chậm. Trước hết, nói với các bạn mới học, khoan hãy nói tới việc nhanh chậm, hãy cố gắng tạo ra output chính xác cái đã.
Còn với những người có kinh nghiệm một chút, biết làm việc với mảng, tôi muốn nói với các bạn rằng, để ghi dữ liệu được ra mảng thì cũng phải xác định được cái rend của sheet đó. Và để xác định được rend một cách chính xác 100% thì phải kích hoạt sheet đó lên để tìm rend, sau đó muốn làm gì thì làm.
Workbooks("Tên_workbook").Sheets("Tên_Sheet").Activate .
Khi nhiều workbook, nhiều sheet đang làm việc, nếu không kích hoạt rõ ràng, sẽ dẫn tới lỗi có thể xảy ra khi lấy rend. Chúng ta hạn chế kích hoạt chứ không phải là KHÔNG KÍCH HOẠT. Việc hạn chế thì sẽ hạn chế nhưng khi cần thì PHẢI LÀM KHÔNG RUN TAY.
3. Làm việc với nhiều file.
Bạn cần đăng nhập để thấy đính kèm
Lúc này các xử lý đã bắt đầu phức tạp hơn. Một lần nữa, tôi phải nhắc lại với những bạn có chút kiến thức nhưng mồm miệng thì nhanh nhảu, chúng ta một lần nữa phải sử dụng lệnh kích hoạt-Activate một cách không run tay. Bạn có thể hạn chế sử dụng với số lần ít nhất, chứ không được nói TÔI SẼ TUYỆT ĐỐi KHÔNG DÙNG.
Như tôi nói ở trên, chúng ta cần phải chỉ định chính xác là làm việc với workbook nào (file excel nào) và sheet nào.
Đây sẽ là nội dung chủ yếu của xây dựng Tool-đó là làm việc với nhiều file và nhiều sheet dữ liệu. Lần đầu tôi làm chương trình như vậy cách đây đã khoảng chục năm, lúc ấy tôi chưa học thiết kế chương trình, cũng chẳng biết gì debug F8 hay F5 gì hết. Cứ chạy lỗi thì tìm và sửa.
Nghĩ lại khoảng thời gian đó, tôi cảm thấy mình đã bỏ ra công sức rất lớn. Rất nhiều tính toán xảy ra ở trong đầu. Việc hoàn thành chương trình và chạy đúng đã khiến tôi tự hào, vì mình đã xử lý thành công một khối lượng công việc khổng lồ. Nhưng nghĩ lại thì chẳng có gì tự hào cả. Mình đã không biết cách làm việc.
Từ kinh nghiệm đó, tôi thấy rằng, nếu code ở mức độ này, bạn cần học thiết kế.
Tôi từng rất sốt ruột khi cứ họp hành thảo luận, trong khi kỳ hạn thì sắp hết. Lúc đó admin tuhocvba an ủi như thế này:
-Yên tâm đi, thiết kế nên lâu. Khi đã fix thiết kế (thống nhất thiết kế) thì code nhanh lắm. Thời gian code chỉ mất khoảng 30% toàn bộ thời gian dự án.
Thiết kế nói ngắn gọn, chúng ta mô hình hóa các yêu cầu, diễn giải chúng bằng mô hình hoặc lời nói theo phương châm càng dễ hiểu càng tốt. Chúng ta liệt kê các chức năng, các thao thao tác người dùng mong muốn...
Toàn bộ những cái đó được viết ra, chúng ta không lưu giữ trong đầu nữa, nên đầu óc rất nhẹ nhàng, không phải căng ra. Mặt khác, người khác nhìn vào cũng hiểu được, nên có thể chia việc dễ dàng.
Đã bao giờ bạn code và sau một thời gian, bạn nhìn lại code của chính mình và không hiểu gì không? Việc đó không có gì là lạ, tôi cũng vậy. Nhưng nếu có bản thiết kế, cái bản thiết kế mà bất cứ ai nhìn vào cũng hiểu được ấy, bây giờ ta nhìn lại bản thiết kế ấy, chắc chắn ta sẽ hiểu ra ngay ta đã làm gì.
Việc update sửa chữa code sau này vì thế cũng thuận lợi hơn.
4. Làm việc với các ứng dụng khác.
Đó là từ Excel giao tiếp với Access, hoặc internet explorer (IE)...
Bạn cần đăng nhập để thấy đính kèm
Kỹ năng xử lý tính toán thì không đòi hỏi nhiều. Logic cũng không đòi hỏi cao. Tuy nhiên vì đã quen làm việc với Excel, bây giờ phải giao tiếp với ứng dụng khác,rõ ràng đó là một thách thức mới với người code VBA.
Nếu chưa một lần giao tiếp thử với IE, với Access,... bây giờ có một người nói, họ muốn code lấy dữ liệu từ web, hay lấy dữ liệu access về, vì chúng ta chưa có kinh nghiệm cho nên không dám trả lời có làm được hay không, hay là áng chừng cần bao nhiêu thời gian để làm xong. Như vậy thì vẫn chưa thể nói là trưởng thành.
Tất nhiên các bạn không thể biết hết, chẳng hạn nếu không có mối quan tâm về cad thì không code được, không có mối quan tâm về ddt2000 thì không code được,... nhưng IE và Access lại là chuyện khác, đó là thứ cơ bản mà các bạn nên một lần thử làm.
Lần đầu tiên giao tiếp với web, đó là tôi soạn sẵn bài viết trên excel rồi cho macro tự động post bài, tôi rất sung sướng.
Lần thứ hai giao tiếp với web, tôi code dạo cho người ta-kiếm chút tiền lẻ hihi.
Lần đâu tiên giao tiếp với access, đó là câu chuyện cũng rất thú vị mà có thời gian tôi sẽ viết sau.