sql - 引用 Excel 电子表格会导致 VBA 宏代码出现问题
问题描述
我的电子表格中有 2 个标签。
选项卡 1 - 此选项卡包含一个 Worksheet_Change 宏,它从目标单元格中获取值,稍后在我的针对表的选择查询中使用。
选项卡 2 - 我在此选项卡中有一个与 SQL 数据库连接的表,它基本上显示 SQL 表中的所有数据。
代码看起来像这样......
If Not Intersect(Target, [A:A]) Is Nothing Then
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Val1 As String
Dim strSQL As String
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
'Check if there's value in A, if not set to No Fille
Val1 = Trim(Target.Value)
If IsEmpty(Val1) = True Or Val1= "" Then
Target.Interior.ColorIndex = 0
Exit Sub
End If
'Now open the connection.
conn.Open strConn
strSQL = "SELECT 1 FROM table1 where ID= '" & Val1 & "'"
Debug.Print strSQL
rs.Open strSQL, conn
If rs.BOF And rs.EOF Then
Target.Interior.ColorIndex = 3
Else
Target.Interior.ColorIndex = 4
End If
conn.Close
Set rs = Nothing
Set conn = Nothing
End If
这是正在发生的事情。我进入选项卡 2 并获取一个 ID,比如说 Test123(这是有效的,因为我在测试之前已经检查过它),然后我进入选项卡 1 并将其粘贴到 A2 中。我的宏执行,但是将单元格着色为值无效。
本质上,执行这部分代码是因为 EOF 和 BOF 都为真(返回值为 -1)
If rs.BOF And rs.EOF Then
Target.Interior.ColorIndex = 3
我在 strSQL 中添加了一个 Debug.Print 来检查查询,这就是它的样子(注意第 2 行的单引号)
SELECT 1 FROM table1 where ID= 'Test123
'
知道为什么会发生这种情况以及如何解决吗?我在 A 列中的任何单元格中输入的任何其他值在 SQL 查询中看起来都正确,如下所示:
SELECT 1 FROM table1 where ID= 'Test1'
有什么办法为什么单引号行出现在第二行,我有一种感觉,这正是它导致问题的原因。
@蒂姆威廉姆斯
我按照你的指示做了,它看起来像这样:来自即时窗口的确切结果。
B 66
G 71
4 52
13
10
解决方案
如果您认为有空格干扰 Val1,这里发布了一个可能有效的函数:
https://excelfox.com/forum/showthread.php/155-Trim-all-Cells-in-a-Worksheet-VBA#post1092
代码由 Rick Rothstein 提供
Function CleanTrim(ByVal S As String, Optional ConvertNonBreakingSpace As Boolean = True) As String
Dim X As Long, CodesToClean As Variant
CodesToClean = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, _
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 127, 129, 141, 143, 144, 157)
If ConvertNonBreakingSpace Then S = Replace(S, Chr(160), " ")
For X = LBound(CodesToClean) To UBound(CodesToClean)
If InStr(S, Chr(CodesToClean(X))) Then S = Replace(S, Chr(CodesToClean(X)), "")
Next
CleanTrim = WorksheetFunction.Trim(S)
End Function
推荐阅读
- react-native - 视图中的项目离开屏幕
- java - 将类的名称添加到 json
- tensorflow - 无法恢复 TensorFlow 检查点
- python - maya中的按钮反馈颜色python?
- swift - 为什么表格视图隐藏在搜索栏下方?
- react-native - 提供图标以响应堆栈导航
- python - 如何展平任意输入形状的数据?
- ruby-on-rails - 将参数传递给 around_action 引发:LocalJumpError no block given (yield)
- python - Kivy:如何修复 gstplayer 中的“无法创建 playbin”错误
- python - python - 将.json加载到字典中失败