我正在开发一个电子表格工具,该工具可以查询 SQL Server 数据库并用结果填充各种工作表。我为用户提供了一个简单的 GUI(格式化单元格)来输入他们的数据库凭据和一个用于测试连接的 Excel 表单按钮。当按下按钮并正确形成连接字符串时,我通过将状态指示器的颜色从红色更改为绿色来识别这一点。我使用 Worksheet_Change 函数添加了对保存凭据的单元格范围的检查,如果任何单元格被更改,该函数会将状态从绿色切换回红色。
问题是用户正在输入他们连接字符串的某些方面,可能是最后一个字段,然后在没有先按回车键或导航离开的情况下按下“测试连接”按钮。并实际将值写入单元格。首先调用我的“测试连接”宏(链接到按钮),将状态指示器切换为绿色(假设凭据正确),但直到按钮宏运行完成后才会调用 Worksheet_Change 方法。结果是状态指示灯从绿色闪烁,然后返回红色,尽管已成功建立数据库连接。
我已经尝试过手动将焦点从当前单元格中切换出来。在从表单按钮调用我的“TestConnection”函数之前。但到目前为止,没有任何效果。
编辑:一些代码...
Private Sub Worksheet_Change(ByVal Target As Range)
Call SetGlobals
'Check if database criteria has changed
If Not Intersect(Target, Target.Worksheet.Range(DB_CELL_RANGE)) Is Nothing Then
Call UpdateDBStatus(1)
End If
End Sub
'Connect to database using Main sheet credentials
Function TestConnection()
'Connection vars
Set cnn = New ADODB.Connection
'Open the connection.
On Error GoTo ConnectError
cnn.Open GetConnectionString()
'Update dependencies
'On Error GoTo FilterError
Call UpdateFilter("select ********", "F", "F")
Call UpdateFilter("select *******", "E", "E")
Call UpdateDBStatus(2)
MsgBox "Connected successfully to '" & DBASE & "' on machine '" & SERVER & "'"
'Cleanup
cnn.Close
Set cnn = Nothing
Exit Function
ConnectError:
Call UpdateDBStatus(1)
MsgBox "Could not establish a connection."
Exit Function
FilterError:
MsgBox "Filter Update Failure."
Exit Function
End Function
'Set the status of the database connection and mark the result
Public Function UpdateDBStatus(Status As Integer)
If Status = 1 Then
Sheets("Main").Range(DB_STATUS_CELL).Value = "Not Connected"
Sheets("Main").Range(DB_STATUS_CELL).Interior.ColorIndex = 3
DB_STATUS = False
Else
Sheets("Main").Range(DB_STATUS_CELL).Value = "Connected"
Sheets("Main").Range(DB_STATUS_CELL).Interior.ColorIndex = 4
DB_STATUS = True
End If
End Function
基本上,如果有人当前正在编辑 DB_CELL_RANGE 内的单元格并且他们按下“测试连接”按钮,我希望在调用“测试连接”之前完成 Worksheet_Change。