Tìm hiểu cách gỡ lỗi các hàm tùy chỉnh trong Excel

  • Chia Sẻ Cái Này
Michael Brown

Vì bạn đã biết cách tạo UDF (và tôi hy vọng bạn cũng đã thử áp dụng chúng trong Excel của mình), hãy tìm hiểu sâu hơn một chút và xem có thể làm gì trong trường hợp hàm do người dùng xác định của bạn không hoạt động.

Để giải quyết một số vấn đề khi tạo chức năng tùy chỉnh, rất có thể bạn sẽ cần chạy gỡ lỗi. Sau đó, bạn có thể chắc chắn rằng chức năng đang hoạt động bình thường.

Chúng ta sẽ khám phá các kỹ thuật gỡ lỗi sau:

    Khi bạn tạo một chức năng tùy chỉnh, luôn có khả năng xảy ra rằng bạn sẽ phạm sai lầm. Các chức năng tùy chỉnh thường khá phức tạp. Và không phải lúc nào chúng cũng bắt đầu hoạt động chính xác ngay lập tức. Công thức có thể trả về kết quả không chính xác hoặc lỗi #VALUE! lỗi. Không giống như các hàm Excel tiêu chuẩn, bạn sẽ không thấy bất kỳ thông báo nào khác.

    Có cách nào để thực hiện từng bước một hàm tùy chỉnh để kiểm tra xem từng câu lệnh của hàm đó hoạt động như thế nào không? Chắc chắn rồi! Gỡ lỗi được sử dụng cho việc này.

    Tôi sẽ cung cấp cho bạn một số cách để gỡ lỗi chức năng tùy chỉnh của bạn để bạn có thể chọn cách phù hợp với mình.

    Ví dụ: chúng tôi sử dụng chức năng tùy chỉnh GetMaxBetween từ một trong các bài viết trước của chúng tôi, tính toán số lượng lớn nhất trong phạm vi giá trị đã chỉ định:

    Hàm GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i Là Số nguyên ReDim arrNums(rngCells.Count) Cho Mỗi NumRange Trong rngCells vMax =NumRange Select Case vMax Case MinNum + 0.01 To MaxNum - 0.01 arrNums(i) = vMax i = i + 1 Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End Function

    Các đối số của hàm là phạm vi ô nơi các số được viết, cũng như giới hạn trên và dưới của giá trị.

    Đặt hàm MsgBox ở những vị trí quan trọng

    Để giám sát việc thực hiện phép tính, bạn có thể hiển thị các giá trị của các biến quan trọng nhất trên màn hình ở đúng nơi. Điều này có thể được thực hiện bằng hộp thoại bật lên.

    MsgBox là hộp thoại mà bạn có thể sử dụng để hiển thị một số loại thông báo cho người dùng.

    Cú pháp của MsgBox tương tự như các hàm VBA khác:

    MsgBox(prompt [, buttons] [, title] [, helpfile, context])

    prompt là đối số bắt buộc. Nó chứa thông báo mà bạn nhìn thấy trong hộp thoại. Nó cũng có thể được sử dụng để hiển thị giá trị của các biến riêng lẻ.

    Tất cả các đối số khác là tùy chọn.

    [ nút ] - xác định nút và biểu tượng nào hiển thị trong MsgBox . Ví dụ: nếu chúng ta sử dụng tùy chọn vbOkOnly thì chỉ có nút OK được hiển thị. Ngay cả khi bạn bỏ qua đối số này, thì nút này được sử dụng theo mặc định.

    [ tiêu đề ] - tại đây bạn có thể chỉ định tiêu đề của hộp thư.

    Hãy chuyển từ từ để thực hành và bắt đầu gỡ lỗi. Để hiển thịthông báo, hãy thêm dòng sau vào mã của hàm do người dùng xác định GetMaxBetween trước toán tử Case Else :

    MsgBox vMax,, "Count -" & i

    Đây là kết quả chúng ta sẽ nhận được:

    Hàm GetMaxBetween(rngCells As Range, MinNum, MaxNum) Dim NumRange As Range Dim vMax Dim arrNums() Dim i As Integer ReDim arrNums(rngCells.Count) Cho Mỗi NumRange Trong rngCells vMax = NumRange Chọn Trường hợp vMax Trường hợp MinNum + 0,01 Đến MaxNum - 0,01 arrNums(i) = vMax i = i + 1 MsgBox vMax,, "Count -" & i Case Else GetMaxBetween = 0 End Select Next NumRange GetMaxBetween = WorksheetFunction.Max(arrNums) End Function

    Sử dụng biến vMax trong hộp thoại, chúng ta sẽ xem những số nào đạt tiêu chuẩn để chọn, vì vậy rằng chúng ta có thể chọn cái lớn nhất trong số chúng. Với biểu thức "Đếm -" & Tôi trong thanh tiêu đề, chúng tôi cho biết chúng tôi đã chọn bao nhiêu số để xác định giá trị tối đa. Bộ đếm sẽ được tăng lên với mỗi giá trị mới.

    Sau khi chúng tôi đã đặt UDF, chúng tôi sẽ áp dụng công thức bên dưới cho phạm vi ngày:

    = GetMaxBetween (A1:A6,10,50)

    Sau nút Enter được nhấn, bạn sẽ thấy thông báo như trong ảnh chụp màn hình bên dưới:

    Đây là số đầu tiên trong dãy A1: A6 đáp ứng tiêu chí: lớn hơn 10 nhưng nhỏ hơn hơn 50.

    Sau khi bạn nhấp vào OK, thông báo thứ hai xuất hiện với số 14. Các số còn lại không khớp với lựa chọntiêu chuẩn. Do đó, hàm thoát và trả về giá trị lớn nhất trong hai giá trị, 17.

    Hàm MsgBox có thể được sử dụng ở những vị trí quan trọng nhất trong hàm tùy chỉnh của bạn để kiểm soát cách các giá trị . của các biến riêng lẻ thay đổi. Hộp thông báo có thể rất hữu ích khi bạn có một chức năng lớn và nhiều tính toán. Trong trường hợp này, bạn sẽ dễ dàng xác định phần nào của mã xảy ra lỗi.

    Xác định điểm dừng và thực hiện từng bước

    Bạn có thể thêm điểm ngắt vào mã của chức năng của bạn nơi thực thi mã sẽ dừng lại. Vì vậy, bạn có thể làm theo từng bước quá trình tính toán. Khi làm như vậy, bạn có thể thấy giá trị của các biến thay đổi như thế nào.

    Để thêm điểm dừng, hãy đặt con trỏ trên dòng chứa câu lệnh mà bạn chọn tạm dừng. Sau đó nhấp chuột phải và chọn Gỡ lỗi -> Chuyển đổi Điểm ngắt hoặc chỉ cần nhấn F9 . Bạn cũng có thể nhấp vào vị trí mong muốn trên vùng dọc màu xám ở bên trái của mã chức năng.

    Một vòng tròn màu đỏ sẽ xuất hiện, như bạn có thể thấy trong ảnh chụp màn hình bên dưới. Dòng mã nơi quá trình tính toán sẽ bị dừng được đánh dấu bằng màu đỏ.

    Bây giờ, cửa sổ trình soạn thảo VBA sẽ được mở khi chức năng này đang chạy. Con trỏ sẽ được định vị tại điểm mà bạn đã dừng.

    Nếu bạn di con trỏ chuột lên bất kỳ biến nào trong mã hàm, bạn có thể thấy biến hiện tại của chúnggiá trị:

    Nhấn F5 để tiếp tục tính toán.

    Lưu ý. Sau điểm ngắt, bạn có thể bắt đầu theo dõi từng bước tiến trình tính toán. Nếu bạn nhấn nút F8, chỉ một dòng tiếp theo của mã VBA sẽ được thực thi. Đường màu vàng có mũi tên cũng sẽ di chuyển đến vị trí mã được thực thi cuối cùng.

    Vì quá trình thực thi hàm lại bị tạm dừng nên bạn có thể xem các giá trị hiện tại của tất cả các biến của hàm bằng cách sử dụng con trỏ chuột.

    Nhấn F8 tiếp theo sẽ đưa chúng ta tiến thêm một bước . Vì vậy, bạn có thể nhấn F8 cho đến khi kết thúc phép tính. Hoặc nhấn F5 để tiếp tục tính toán cho đến điểm dừng tiếp theo.

    Nếu xảy ra lỗi, con trỏ sẽ bị dừng tại điểm trong mã xảy ra lỗi. Và bạn cũng sẽ thấy một thông báo lỗi bật lên. Điều này giúp dễ dàng xác định nguyên nhân của sự cố.

    Các điểm ngắt mà bạn chỉ định sẽ được áp dụng cho đến khi bạn đóng tệp. Khi bạn mở lại, bạn sẽ cần thiết lập lại chúng. Bạn có nghĩ đó không phải là phương pháp thuận tiện nhất không?

    Tuy nhiên, vấn đề này có thể giải quyết được. Chèn câu lệnh Stop vào mã chức năng tại các điểm cần thiết và bạn có thể dừng thực thi chương trình giống như khi sử dụng các điểm dừng.

    Khi VBA gặp câu lệnh Stop , nó sẽ dừng thực thi chương trình và đợi hành động của bạn. Kiểm tra giá trị của các biến, sau đónhấn F5 để tiếp tục.

    Hoặc nhấn F8 để thực hiện chức năng từng bước như mô tả ở trên.

    Câu lệnh Stop là một phần của chương trình và do đó là không bị xóa, như trường hợp của điểm dừng. Khi bạn gỡ lỗi xong, hãy tự gỡ bỏ nó. Hoặc biến nó thành một nhận xét bằng cách đặt trước nó một dấu nháy đơn (').

    Gỡ lỗi bằng toán tử Debug.Print

    Bạn có thể đặt Debug.Print trong mã chức năng ở đúng nơi. Điều này hữu ích để kiểm tra giá trị của các biến thay đổi theo chu kỳ.

    Bạn có thể xem ví dụ về hiệu suất của Debug.Print trên ảnh chụp màn hình bên dưới.

    Câu lệnh Debug.Print i, vMax in các giá trị và số thứ tự của chúng.

    Trong cửa sổ Ngay lập tức, bạn thấy hai số (17 và 14) từ phạm vi đã chọn, tương ứng với đặt giới hạn và trong đó giới hạn tối đa sẽ được chọn. Các chữ số 1 và 2 có nghĩa là hàm đã hoàn thành 2 chu kỳ trong đó các số đã được chọn. Chúng tôi thấy các giá trị của các biến quan trọng nhất, như chúng tôi đã làm trước đó với MsgBox . Nhưng điều này không dừng chức năng.

    Gọi một hàm từ một thủ tục

    Bạn có thể gọi một hàm do người dùng xác định không phải từ một ô trong trang tính mà từ một thủ tục. Trong trường hợp này, tất cả các lỗi sẽ được hiển thị trong cửa sổ Visual Basic Editor.

    Đây là cách bạn có thể gọi hàm do người dùng xác định GetMaxBerween từ mộtthủ tục:

    Sub Test() Dim x x = GetMaxBetween(Range ( "A1:A6" ), 10, 50) MsgBox(x) End Sub

    Định vị con trỏ ở bất kỳ đâu trong mã và nhấn F5 . Nếu không có lỗi trong hàm, bạn sẽ thấy cửa sổ bật lên có kết quả tính toán.

    Trong trường hợp có lỗi, bạn sẽ thấy thông báo tương ứng trong trình soạn thảo VBA. Quá trình tính toán sẽ dừng lại và dòng mã xảy ra lỗi sẽ được đánh dấu bằng màu vàng. Bạn có thể dễ dàng xác định vị trí và lý do xảy ra lỗi.

    Chỉ vậy thôi. Bây giờ bạn đã tạo phần bổ trợ của riêng mình, thêm nó vào Excel và bạn có thể sử dụng UDF trong đó. Nếu bạn muốn sử dụng nhiều UDF hơn, chỉ cần viết mã trong mô-đun bổ trợ trong trình chỉnh sửa VBA và lưu mã.

    Hôm nay là vậy. Chúng tôi đã đề cập đến các cách khác nhau để gỡ lỗi các hàm tùy chỉnh và tìm hiểu cách sử dụng chúng trong sổ làm việc của bạn. Chúng tôi thực sự hy vọng bạn thấy những hướng dẫn này hữu ích. Nếu bạn có bất kỳ câu hỏi nào, hãy viết trong phần nhận xét cho bài viết này.

    Michael Brown là một người đam mê công nghệ chuyên dụng với niềm đam mê đơn giản hóa các quy trình phức tạp bằng các công cụ phần mềm. Với hơn một thập kỷ kinh nghiệm trong ngành công nghệ, anh ấy đã trau dồi kỹ năng của mình trong Microsoft Excel và Outlook, cũng như Google Trang tính và Tài liệu. Blog của Michael dành để chia sẻ kiến ​​thức và chuyên môn của anh ấy với những người khác, cung cấp các mẹo và hướng dẫn dễ thực hiện để cải thiện năng suất và hiệu quả. Cho dù bạn là một chuyên gia dày dạn kinh nghiệm hay người mới bắt đầu, blog của Michael đều cung cấp những hiểu biết có giá trị và lời khuyên thiết thực để tận dụng tối đa những công cụ phần mềm thiết yếu này.