如何解决Excel VB For循环未遍历if语句
| 我很欣赏这是一个业余问题,但是我不习惯VB及其语法。 我试图根据数量(QTY)列中是否有值,将信息从一个工作表(产品列表)转移到另一个工作表(报价)。 这是我的方法:Private Sub cmdProductListContinue_Click()
\'Declare variabless
Dim i,duration,qty,outputX,outputY
\'Set initial values
duration = 120 \'Used to determine number of iterations in for loop (no. of QTY cells we are to check)
i = 3 \'Used as cell co-ordinates to pull information from
outputX = 17 \'Used as cell co-ordinates to output information
\'Populate invoice with product info by iterating through all QTY cells and pulling across info if needed
For i = 3 To duration
\'Reset quantity to zero each time
qty = 0
\'Set quantity to the value in the QTY cell
Set qty = Worksheets(\"ProductList\").Cells(i,3)
\'If there is a quantity value present
If qty > 0 Then
\'Insert quantity value into appropriate cell in quote sheet
Worksheets(\"Quote\").Cells(outputX,2) = qty
\'Insert description into quote sheet
Worksheets(\"Quote\").Cells(outputX,3) = Worksheets(\"ProductList\").Cells(i,2)
\'Insert unit price into quote sheet
Worksheets(\"Quote\").Cells(outputX,4) = Worksheets(\"ProductList\").Cells(i,4)
\'Increment the output co-ordinates to the next line
outputX = outputX + 1
End If
Next i
\'Open quote sheet
Sheets(\"Quote\").Select
End Sub
使用断点,我可以看到,当有数量值时,它会成功移至第一个\'Then \'语句,但随后似乎只是返回到循环的开始,完全丢失了其他两条输出线。
我的语法正确吗?我的逻辑中缺少什么吗?
我很欣赏,如果没有工作表来查看数据列等,可能很难考虑一下。
\'i \'设置为3,因为“数量”列的第一个值在单元格C,3中,其描述在C,2中,而价格在C,4中。然后通过循环将其递增。
任何帮助,将不胜感激。
谢谢!!
解决方法
在这里,您要为对象(范围)分配数量:
Set qty = Worksheets(\"ProductList\").Cells(i,3)
如果您想获取单元格值,请使用:
qty = Worksheets(\"ProductList\").Cells(i,3).Value
分配对象时使用\“ Set \”,因此您在这里不需要它。 \“ Value \”是默认属性,但是无论如何我还是希望包含它。
稍微修改一下代码:
Private Sub cmdProductListContinue_Click()
Dim i,duration,qty,outputX
Dim wsQuote As Worksheet,wsProd As Worksheet
Set wsQuote = Worksheets(\"Quote\")
Set wsProd = Worksheets(\"ProductList\")
duration = 120
outputX = 17
For i = 3 To duration
qty = wsProd.Cells(i,3).Value
If qty > 0 Then
With wsQuote.Rows(outputX)
.Cells(2).Value = qty
.Cells(3).Value = wsProd.Cells(i,2).Value
.Cells(4).Value = wsProd.Cells(i,4).Value
outputX = outputX + 1
End With
End If
Next i
wsQuote.Activate
End Sub
, Set qty = Worksheets(\"ProductList\").Cells(i,i)
这个!将遍历工作表的对角线,就像
C3,D4,E5等
您可能想要类似
Set qty = Worksheets(\"ProductList\").Cells(i,3)
要么
Set qty = Worksheets(\"ProductList\").Cells(3,i)
还要检查对ProductList表的其他引用(行尾):
\'Insert description into quote sheet
Worksheets(\"Quote\").Cells(outputX,outputY + 1) = Worksheets(\"ProductList\").Cells(i,i - 1)
\'Insert unit price into quote sheet
Worksheets(\"Quote\").Cells(outputX,outputY + 2) = Worksheets(\"ProductList\").Cells(i,i + 1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。