【发布时间】:2014-06-09 13:26:02
【问题描述】:
我编写了一个程序,根据开始和结束计数计算一天内测试 X 个小部件的次数。一段时间后,小部件将失败并必须更换,因此计数将从零开始。我正在使用 Select Case 来计算数据,并使用 Excel 中的下拉菜单来选择小部件。除了一件事之外,一切都很好......我无法选择多个小部件来搜索案例。
我了解案例陈述的一般原则 - 但有没有办法通过案例仅搜索一个场景?
'Create subroutine that will copy and total data from worksheet 1 to worksheet 2
Private Sub VTS()
'Establish variable for CASE to search
Dim ValR As String
'Establish counter array
Dim myarray(1 To 170)
myarray(1) = Worksheets(2).Range("A7").Value
myarray(2) = Worksheets(2).Range("A10").Value
...
ValR = Worksheets(1).Range("B4").Value
Select Case ValR
Case "1A"
Worksheets(2).Range("C7").Copy ' Copy current Total
Worksheets(2).Range("A7").PasteSpecial ' Move to "Previous Total" to sum total
myarray(1) = Worksheets(1).Range("B3").Value - Worksheets(1).Range("B2").Value
If myarray(1) < 0 Then
myarray(1) = 1000000 + myarray(1)
End If
Worksheets(2).Range("B7").Value = myarray(1)
Worksheets(2).Range("C7").Value = Worksheets(2).Range("A7").Value + Worksheets(2).Range("B7").Value
Worksheets(2).Range("C7").Copy
Worksheets(1).Range("B10").PasteSpecial
Case "1B"
Worksheets(2).Range("C10").Copy
Worksheets(2).Range("A10").PasteSpecial
myarray(2) = Worksheets(1).Range("B3").Value - Worksheets(1).Range("B2").Value
If myarray(2) < 0 Then
myarray(2) = 1000000 + myarray(2)
End If
Worksheets(2).Range("B10").Value = myarray(2)
Worksheets(2).Range("C10").Value = Worksheets(2).Range("A10").Value + Worksheets(2).Range("B10").Value
Worksheets(2).Range("C10").Copy
Worksheets(1).Range("B10").PasteSpecial
Case Else
MsgBox "Wrong Model Entered / Model Does Not Exist"
End Select
End Sub
有什么建议吗?
谢谢!
【问题讨论】:
-
您是循环浏览,还是选择每个小部件,然后一次运行一个宏?如果是后者,for next 或 for each 循环听起来像是要走的路。如果您已经在使用 for 循环,我不确定您在寻找什么。
-
我一次运行一个宏。我有一个输入框,其中使用了开始、结束和小部件。用户将提交数据,然后宏处理。感谢您的建议...我不确定如何实现 For Next 循环,但这给了我一些工作要做。再次感谢
-
如果您从使用角度简要解释如何调用此子程序以及“选择多个小部件”的含义(用户端以及代码和/或 Excel 单元格中的变量),将会有所帮助。跨度>
-
当然 - 就像我上面的评论 - 提示用户输入开始计数、结束计数以及测试了哪些小部件。我正在使用一个宏,它允许用户从下拉菜单中选择多个小部件,它们用逗号分隔。单一搜索方案工作正常。用户提交数据,Select Case 搜索正确的值并计算运行总计。它只是不喜欢我有多个要搜索的值。
-
如果我假设 ValR 代表一个小部件,那么如果您想要多个小部件,您可能希望将其更改为小部件数组。在这种情况下,您可以在 case 语句周围放置一个 for 循环,以循环遍历将它们提供给 case 语句的项目。
标签: vba excel select-case