2009-03-25 36 views
8

Có thể xem CallStack trong VBA cho MS Access 2003 không? Đó là để nói, nó sẽ có thể nhìn thấy từ những gì procedure hoặc function khác function được gọi là?Cách kiểm tra ngăn xếp cuộc gọi

+0

Đây là loại nhiệm vụ ASM phù hợp. – pyon

Trả lời

3

Không có cách nào có lập trình trong VBA để xem ngăn xếp cuộc gọi mà tôi biết. Giải pháp thông thường cho vấn đề này là sử dụng một số cấu trúc để theo dõi việc gọi các hàm, nhưng nó luôn có vẻ giống như một kludge với tôi, và thực sự chỉ sử dụng khi lập trình (không phải lúc chạy), trong trường hợp này có vẻ như với VBE khả năng tích hợp để xem chồng cuộc gọi là đủ.

Và, BTW, tôi luôn đặt nút ngăn xếp cuộc gọi trên thanh công cụ VBE của mình, vì đây là một trong những hàm được sử dụng thường xuyên nhất đối với tôi. Tôi cũng thêm vào nút biên dịch - Tôi nghĩ rằng nó là điên mà nó không phải trên thanh công cụ theo mặc định bởi vì nó khuyến khích mọi người để mã mà không bao giờ buộc phải biên dịch. Sau đó, Access 2000 thậm chí không sử dụng Option Explicit theo mặc định (được cho là nhất quán với các ứng dụng khác sử dụng VBE - nói cách khác, tắt truy cập để làm cho nó phù hợp với các ứng dụng gần như không mã hóa nặng).

Nhưng tôi lạc đề ...

9

Khi chạy, menu Xem -> Ngăn xếp cuộc gọi (hoặc nhấn CTRL + L).

2

Cuối cùng, thêm một tham số tùy chọn để chức năng của bạn, và vượt qua người gọi tên như vậy. Đối với biểu mẫu, bạn có thể sử dụng tham số Me.Name.

0

Có thể, NHƯNG nó không hoàn toàn hữu ích!

Private Declare Sub SetMode Lib "vba332.dll" Alias "EbSetMode" (ByVal lngMode As Long) 
Private Declare Function GetCallStackCount Lib "vba332.dll" Alias "EbGetCallstackCount" (lngCount As Long) As Long 
Private Declare Function GetCallStackFunction Lib "vba332.dll" Alias "EbGetCallstackFunction" (ByVal Lvl As Long, ByRef strBase As String, ByRef strModule As String, ByRef strFunction As String, ByRef Done As Long) As Long 

Trước khi sử dụng GetCallStackCount và GetCallStackFunction gọi SetMode (2) và sau SetMode (1).

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