Como inspecionar Call Stack
-
22-08-2019 - |
Pergunta
Seria possível ver o CallStack
em VBA para MS Access 2003? Ou seja, seria possível ver do que procedure
ou function
outra function
foi chamado?
Solução
Não há nenhuma maneira programática em VBA para ver a pilha de chamadas que eu saiba. A solução usual para este problema é usar alguma estrutura para rastrear chamar de funções, mas sempre parece ser um truque para mim, e realmente de uso somente quando a programação (não em tempo de execução), em cujo caso parece-me que o VBE do built-in capacidade de ver a pilha de chamadas é suficiente.
E, BTW, eu sempre colocar o botão de pilha de chamadas na minha barra de ferramentas VBE, já que é uma das funções mais utilizadas para mim. Eu também adicionar o botão de compilação - Eu acho que é uma loucura que não é na barra de ferramentas por padrão porque ele incentiva as pessoas a código sem nunca forçar uma compilação. Então, novamente, Access 2000 nem sequer usar Option Explicit por padrão (supostamente para consistência com outros aplicativos usando o VBE - em outras palavras, emburrecer acesso, a fim de torná-lo compatível com aplicativos que não são quase tão code- pesado).
Mas estou divagando ...
Outras dicas
Durante a execução, o menu Ver -.> Chamada Stack (ou pressione CTRL + L)
Por fim, adicione um parâmetro opcional para a sua função, e passar o nome do chamador assim. Para formulários, você pode usar Me.Name
como parâmetro.
Sim, é possível, mas não é muito útil!
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
Antes de usar GetCallStackCount e GetCallStackFunction chamada SetMode (2), e depois de SetMode (1).