Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串用作If语句(VBA)的一部分_Vba_Excel_Excel 2010 - Fatal编程技术网

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

将字符串用作If语句(VBA)的一部分,vba,excel,excel-2010,Vba,Excel,Excel 2010,我在VBA中有一个If/Then循环,用于检查每个选项卡中的相同单元格是否相等,并且我可以创建一个字符串,该字符串在已知选项卡数(3个选项卡)的If/Then循环中工作;但是,宏需要查看任意数量的选项卡,我需要一个动态If/Then语句。我试图创建一个字符串,该字符串基本上根据选项卡的数量编写代码,但由于该字符串是一个变量,因此类型不匹配 例如,如果有3个选项卡,则此选项有效: If Worksheets(loc(1)).Cells(TseriesLine, 15) = Worksheets(l

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

例如,如果有3个选项卡,则此选项有效:

If 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) Then

但这不起作用:

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 ....
我还尝试过使用依瓦鲁酯(ifline)和StrConv(ifline),但没有成功。任何帮助都将不胜感激


谢谢

试试这样的东西

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

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
Dim sValue作为字符串
将ws1设置为工作表
设置ws1=工作表(“loc(1)”)
sValue=ws1.Cells(TseriesLine,15).Value2
作为布尔值的双直线
bifline=True
将ws设置为工作表
对于此工作簿中的每个ws。工作表
如果ws.Name ws1.Name那么
如果sValue为ws.Cells(TseriesLine,15).Value2,则
bifline=False
退出
终点
如果结束
下一个
如果是这样的话
“更多代码
如果结束

试试这样的方法

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

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
Dim sValue作为字符串
将ws1设置为工作表
设置ws1=工作表(“loc(1)”)
sValue=ws1.Cells(TseriesLine,15).Value2
作为布尔值的双直线
bifline=True
将ws设置为工作表
对于此工作簿中的每个ws。工作表
如果ws.Name ws1.Name那么
如果sValue为ws.Cells(TseriesLine,15).Value2,则
bifline=False
退出
终点
如果结束
下一个
如果是这样的话
“更多代码
如果结束

您可以使用每个工作簿对象中的工作表集合在每张工作表上循环

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
函数doesRangeMatch(rangeAddress作为字符串)作为布尔值
将ws设置为工作表
对于此工作簿中的每个ws。工作表
如果ThisWorkbook.Worksheets(1).Range(rangeAddress).Value为ws.Range(rangeAddress).Value,则
doesRangeMatch=False
退出函数“未找到匹配项时提前退出”
如果结束
下一个
doesRangeMatch=True'如果循环通过,则所有循环都必须匹配
端函数

您可以使用每个工作簿对象中的工作表集合在每张工作表上循环

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
函数doesRangeMatch(rangeAddress作为字符串)作为布尔值
将ws设置为工作表
对于此工作簿中的每个ws。工作表
如果ThisWorkbook.Worksheets(1).Range(rangeAddress).Value为ws.Range(rangeAddress).Value,则
doesRangeMatch=False
退出函数“未找到匹配项时提前退出”
如果结束
下一个
doesRangeMatch=True'如果循环通过,则所有循环都必须匹配
端函数

非常感谢大家!我使用了一系列的建议来设计这个循环。以下是解决方案:

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
ss=2至numloc的

如果工作表(loc(1)).单元格(Tseresline,15)工作表(loc(ss)).单元格(Tseresline,15),则
doNumMatch=False
退出
否则:doNumMatch=True
如果结束
下一个
如果不匹配的话

非常感谢大家!我使用了一系列的建议来设计这个循环。以下是解决方案:

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
ss=2至numloc的

如果工作表(loc(1)).单元格(Tseresline,15)工作表(loc(ss)).单元格(Tseresline,15),则
doNumMatch=False
退出
否则:doNumMatch=True
如果结束
下一个
如果不匹配的话

这是一种糟糕的方法,但您可以在这里发布您的代码,我们可以帮助您为每个循环获得一个
。并将每张纸与第一张进行比较。如果有错误,那么不要做其余的。然后根据结果指定布尔变量true或false。然后你可以测试这个布尔变量。这是一个糟糕的方法,但是在这里你可以发布你的代码,我们可以帮助你为每个
循环得到一个
。并将每张纸与第一张进行比较。如果有错误,那么不要做其余的。然后根据结果指定布尔变量true或false。然后你可以测试这个布尔变量。