Excel VBA - 选择多个值以搜索案例

Posted

技术标签:

【中文标题】Excel VBA - 选择多个值以搜索案例【英文标题】:Excel VBA - Select multiple values to search a Case 【发布时间】: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 语句的项目。 【参考方案1】:

您可以让用户通过“;”分隔小部件然后使用以下循环:

'widgetString = "widget1;widget2;widget3"

widgets = Split(widgetString, ";")

for w = 0 to ubound(widgets)
    thisWidget = widgets(w)

    'place all of your code here, with thisWidget being the current widget being evaluated

next w

【讨论】:

我在这上面花了一些时间,但是当我有这个时,不断得到一个“编译错误:预期的数组”,并突出显示“UBound”: Dim Valve As String Dim thisValue As String Valve = Split(valveString , ";") For v = 1 To UBound(valves) thisValve = Valves(v) Select Case thisValve... 但是如果我将“阀门”制作成一个数组 --> 将阀门()作为字符串调暗......什么也没有发生。没有错误或计算。 去掉你的声明(Dim Valve as String),看看你是否仍然得到错误。顺便说一句,如果你将 v = 1 循环到 ubound,你会错过第一个插槽,因为数组从 0 开始,但这不是导致错误的原因。 嘿,马修 - 我把它拿出来了,现在我遇到了类型不匹配。 在阀门上?您是否在代码的其他地方使用该变量? Split() 将生成一个字符串数组,因此如果将该变量用作字符串数组以外的任何变量,则可能会出现该错误。

以上是关于Excel VBA - 选择多个值以搜索案例的主要内容,如果未能解决你的问题,请参考以下文章

VBA Excel - 从 Excel 中的一个单元格中选择一个值以更新 SQL 表

如何用excel vba按关键字选择性的遍历文件夹搜索文件?

VBA案例选择多个条件

excel vba 实现跨表单(sheet) 搜索 - 显示搜索行记录搜索历史

高分跪求 VBA word中实现循环搜索 并在WORD中找到列表 再根据已有数据自动填写进本行其它列

加速 Excel VBA 搜索脚本