如何使用case语句从字符串中排除多个值?

时间:2019-05-17 19:36:42

标签: excel vba

我正在从列表框中显示的工作表中获取一些值,就像在屏幕截图(房间)的顶部一样

enter image description here

我正在使用以下代码

ElseIf Left(sh.Cells(r, 8), 1) = "Y" Then ' <<< display all rooms that are working      
        .AddItem
        .List(lC, 0) = sh.Cells(r, 1)
        .List(lC, 1) = sh.Cells(r, 2)
        .List(lC, 2) = sh.Cells(r, 3)
        .List(lC, 3) = sh.Cells(r, 4)
        .List(lC, 4) = sh.Cells(r, 5)
        .List(lC, 5) = sh.Cells(r, 6)
        .List(lC, 6) = sh.Cells(r, 7)
        .List(lC, 7) = sh.Cells(r, 8)

        lC = lC + 1
    End Select          
End If

但是,我正在使用另一段代码,在列表框中获取已经使用的房间(在屏幕截图的底部)。

我想做的是从顶部列表框的房间(房间)中排除这些房间号(4、7、6、2、1)

我的想法是将它们放在一个带有引号和逗号的变量中,例如

roomsInUse = roomsInUse & Chr(34) & sh1.Cells(row, 23) & Chr(34) & ", "

然后删除结尾的逗号

roomsinuseformatted = Left(roomsInUse, Len(roomsInUse) - 2)

然后在我上面的代码中使用一个案例,以排除这些房间号,例如显示

ElseIf Left(sh.Cells(r, 8), 1) = "Y" Then ' <<< display all rooms that are working
    Select Case sh.Cells(r, 1)
    Case roomsinuseformatted 
      Me.lstRooms.AddItem "No Interviews"
      MsgBox ("test")
    Case Else
    'MsgBox (UsedRooms)

        .AddItem
        .List(lC, 0) = sh.Cells(r, 1)
        .List(lC, 1) = sh.Cells(r, 2)
        .List(lC, 2) = sh.Cells(r, 3)
        .List(lC, 3) = sh.Cells(r, 4)
        .List(lC, 4) = sh.Cells(r, 5)
        .List(lC, 5) = sh.Cells(r, 6)
        .List(lC, 6) = sh.Cells(r, 7)
        .List(lC, 7) = sh.Cells(r, 8)

        lC = lC + 1
    End Select   
End If

...但是这行不通,我知道这看起来很草率,而且我敢肯定有更好的方法可以这样做-但不确定吗?

P.S。 Select Case sh.Cells(r, 1)是屏幕快照中第一个列表框中的房间号。

完整pastebin:https://pastebin.com/QpTKR4V4

0 个答案:

没有答案