作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个 VBA 宏,它逐行获取给定列中的单元格值,并为我组装一个 SQL 查询来复制粘贴。它基本上将文本片段和变量放在一个单元格中。查询需要卡号和序数作为输入,因此需要变量。
宏几乎准备就绪,但它陷入了无限的 While 循环。
Sub Query()
Dim Row As Integer
Row = 8
Dim Cardnumber As String
Cardnumber = Range("D" & Row)
Dim Number As Integer
Number = 1
Range("E30").Select
ActiveCell.Value = "SELECT cardnumber, first_name || ' ' || last_name FROM ( SELECT cardnumber, first_name, last_name, c.OrderNo FROM ag_cardholder ch, (SELECT '%" & Cardnumber & "%' cardmask, " & Number & " OrderNo from dual "
While IsNull(Cardnumber) = False
Row = Row + 1
Number = Number + 1
Cardnumber = Range("D" & Row)
ActiveCell.Value = ActiveCell.Value & "UNION ALL SELECT '%" & Cardnumber & "%', " & Number & " OrderNo from dual "
Wend
ActiveCell.Value = ActiveCell.Value & ") c WHERE ch.cardnumber LIKE c.cardmask ORDER BY c.OrderNo ) t"
End Sub
最佳答案
作为 String
, Cardnumber
永远不会是Null
或 Empty
.它只能有零长度,Len(Cardnumber) = 0
.
如果 Cardnumber
是 Variant
, 你可以使用 IsEmpty
测试单元格值是否为空白。
没用IsNull
, 因为 Excel 中的单元格值永远不会是 Null
.即使是 Null
从数据库中获取,Excel 会将其替换为 Empty
.
回答您的下一个问题:我会将该代码重构为:
Sub Query()
Dim InnerSelect As String
Dim CurCell As Range: Set CurCell = ActiveSheet.Range("D8")
Dim Number As Long: Number = 1
Do
Dim Cardnumber As String
Cardnumber = CurCell.Value
If Len(Cardnumber) = 0 Then Exit Do
If Len(InnerSelect) = 0 Then
InnerSelect = "SELECT '%" & Cardnumber & "%' cardmask, " & Number & " OrderNo from dual "
Else
InnerSelect = InnerSelect & "UNION ALL SELECT '%" & Cardnumber & "%', " & Number & " OrderNo from dual "
End If
Number = Number + 1
Set CurCell = CurCell.Offset(1, 0)
Loop
Range("E30").Value = _
"SELECT cardnumber, first_name || ' ' || last_name FROM ( SELECT cardnumber, first_name, last_name, c.OrderNo FROM ag_cardholder ch, (" & _
InnerSelect & _
") c WHERE ch.cardnumber LIKE c.cardmask ORDER BY c.OrderNo ) t"
End Sub
关于excel - Excel VBA 中的 While 循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6466395/
我是一名优秀的程序员,十分优秀!