使用字符串作为If语句(VBA)的一部分

时间:2016-02-09 18:47:35

标签: vba excel-vba excel-2010 excel

我在VBA中有一个If / Then循环,用于检查每个选项卡中的相同单元格是否相等,并且我可以创建一个在If / Then循环中工作的字符串,给定已知数量的选项卡(3个选项卡);但是,宏需要查看任意数量的选项卡,我需要一个动态的If / Then语句。我试图创建一个基本上根据选项卡数量编写代码的字符串,但是我得到Type Mismatch,因为字符串是一个变量。

例如,这有三个选项卡:

ifline = "Worksheets(loc(1)).Cells(TseriesLine, 15) = Worksheets(loc(2)).Cells(TseriesLine, 15) _
   And Worksheets(loc(1)).Cells(TseriesLine, 15) = Worksheets(loc(3)).Cells(TseriesLine, 15)"

If ifline Then ....

...

但这不起作用:

{{1}}

我也尝试过使用Evalulate(ifline)和StrConv(ifline)来取得成功。任何帮助将不胜感激。

由于

3 个答案:

答案 0 :(得分:1)

尝试这样的事情。

如果您知道不想检查的工作表,则可以轻松地对其他工作表名称进行测试。

Dim sValue As String
Dim ws1 As Worksheet
Set ws1 = Worksheets("loc(1)")

sValue = ws1.Cells(TseriesLine, 15).Value2

Dim bifline As Boolean
bifline = True

Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets

    If ws.Name <> ws1.Name Then
        If sValue <> ws.Cells(TseriesLine, 15).Value2 Then
            bifline = False
            Exit For
        End
    End If

Next

If bifline Then
    'more code
End If

答案 1 :(得分:1)

您可以使用每个工作簿对象中的工作表集合遍历每个工作表。

Function doesRangeMatch(rangeAddress As String) As Boolean
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        If ThisWorkbook.Worksheets(1).Range(rangeAddress).Value <> ws.Range(rangeAddress).Value Then
            doesRangeMatch = False 
            Exit Function 'early exit if match not found
        End If
    Next
    doesRangeMatch = True 'if loop goes through then all must match
End Function

答案 2 :(得分:0)

非常感谢大家!我使用了一些建议来提出循环。这是解决方案:

For ss = 2 To numloc
    If Worksheets(loc(1)).Cells(TseriesLine, 15) <> Worksheets(loc(ss)).Cells(TseriesLine, 15) Then
        doNumMatch = False
Exit For
    Else: doNumMatch = True
    End If
Next

If doNumMatch Then