HypRetrieve 未检索到正确的状态代码

HypRetrieve not retrieving correct status code

背景

我有两个数据库需要连接。一个在 Hyperion 中,另一个在 ESS 中。我已经按照文档中的说明导入了 smartview.bas,并且我正在尝试使用其中的函数。我为每个环境设置了虚拟 sheets(SavedLogHyperion 和 SavedLogESS),以确保用户在 运行 所有代码之前登录。如果用户在没有记录或其他可能阻止成功登录的情况下关闭 window,我想检索正确的错误代码。

问题

HypRetrieve 仅确认第一个结果:如果用户能够登录到 Hyperion 环境,但如果 ESS 登录 window 被取消或提供了无效凭据然后关闭,它会检测到代码为 0(“Ok”),因此在未成功登录时检测到第二个环境的成功登录。

代码

我写了一个函数来检索号码,我认为这可能是一个时间问题,这就是我制作它的原因(所以主要代码可以按时解决),但似乎不是。

Function Return_NumCodeSVHypRetrieve(VarTxtSheetToLogin As Variant) As Long
Dim NumCodeHypRetrieve As Long
    NumCodeHypRetrieve = HypRetrieve(VarTxtSheetToLogin)
    Return_NumCodeSVHypRetrieve = NumCodeHypRetrieve
End Function

这个函数在我的主子中被调用

Sub Main()
Dim NumCodeConnectionSheet1 As Long
Dim NumCodeConnectionSheet2 As Long
NumCodeConnectionSheet1 = Return_NumCodeSVHypRetrieve("SavedLogHyperion")
NumCodeConnectionSheet2 = Return_NumCodeSVHypRetrieve("SavedLogESS") 'If I log in "SavedLogHyperion", this variable becomes 0 too, or any other error code that variable had
End Sub

问题

如何根据sheet尝试登录的正确代码正确保存?我对可能的方法一无所知

解法:
问题似乎出在函数的工作原理上;我注意到当函数被应用时,它激活了 sheet,这让我相信计时事件有问题,我提出了以下解决方案,基本上提供了我看到的场景该函数期望,我还注意到,如果我将 NumCode 设置为检索只要直接结果,它不会按预期运行,我的方法是将其声明为变体,然后将其转换为 long。

Function Return_NumCodeSVHypRetrieve(VarTxtSheetToLogin As Variant) As Long
Dim VarNumCode As Variant
    'It seems the function relies on the sheet being activated and if the Retrives does it, it takes miliseconds to do, which are not sync with excel life cycle, thus causing missreadings
    Sheets(VarTxtSheetToLogin).Visible = True: Sheets(VarTxtSheetToLogin).Select: DoEvents
    VarNumCode = HypRetrieve(VarTxtSheetToLogin)
    Sheets(VarTxtSheetToLogin).Visible = False
    Return_NumCodeSVHypRetrieve = CLng(VarNumCode)
End Function