背景
我有两个数据库需要连接。一个在Hyperion,另一个在ESS。我已经按照文档中的说明导入了smartview.bas,并试图使用其中的函数。我为每个环境都有虚拟表(SavedLogHyperion和SavedLogESS),以确保用户在运行所有代码之前登录。如果用户在没有登录或其他可能阻止成功登录的情况下关闭窗口,我想检索正确的错误代码。
问题
HypRetrieve只确认第一个结果:如果用户能够登录Hyperion环境,但如果ESS登录窗口被取消或提供了无效凭据,然后关闭,它会检测到代码为0("确定"),从而检测到第二个环境的成功登录,而不是。
代码
我写了一个函数来检索数字,我认为这可能是一个时间问题,这就是我制作它的原因(所以主代码可以按时解决),但似乎不是。
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
问题
如何根据试图记录的工作表正确保存正确的代码?我对的方法一无所知
解决方案:
问题似乎在于函数的工作方式;我注意到,当应用该函数时,它会激活工作表,这让我相信在计时事件方面存在问题。我提出了以下解决方案,基本上是为了提供我所看到的函数所期望的场景。我还注意到,如果我将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