Excel 我的If语句给了我一个;运行时错误13:类型不匹配“;消息

Excel 我的If语句给了我一个;运行时错误13:类型不匹配“;消息,excel,vba,Excel,Vba,在我提问之前,让我先介绍一下背景知识。我试图解析一个大的文本文件(250000多页),并从中提取值。我使用特定的变量来获取我要查找的值,如下面所示。但是,我的If语句(示例代码顶部的长语句)给出了消息 “运行时错误13类型不匹配” 见下面的代码: If rptText Like "(0825)" And _ Trim(Mid(rptText, 85, 9)) = "(0826)" And _ Trim(Mid(rptText, 85, 9)) = "(0827)" And _

在我提问之前,让我先介绍一下背景知识。我试图解析一个大的文本文件(250000多页),并从中提取值。我使用特定的变量来获取我要查找的值,如下面所示。但是,我的
If
语句(示例代码顶部的长语句)给出了消息

“运行时错误13类型不匹配”

见下面的代码:

If rptText Like "(0825)" And _
   Trim(Mid(rptText, 85, 9)) = "(0826)" And _
   Trim(Mid(rptText, 85, 9)) = "(0827)" And _
   Trim(Mid(rptText, 85, 9)) = "(0828)" And _
   Trim(Mid(rptText, 85, 9)) Then

    cusip0095 = True

  Do
    rptText = ts.ReadLine

    If rptText Like "*MF OMNI*" Then

        mfOmni0095 = Trim(Mid(rptText, 78, 13))
        Exit Do
    End If

    If rptText Like "*CONTROLLED*" Then

        total0095 = Trim(Mid(rptText, 78, 13))
        Exit Do
    End If
  Loop

你们所有人的任何帮助都将是巨大的,提前感谢

编辑:在尝试了答案之后,我需要再解释一下。我引用的变量(0825082608270828)用于解析9个字符长的值。下面是几个示例,说明它在文件中的外观:

(0825)461308108

(0826)921908109


我想要任何前面有变量0825、0826等的值来获取这些值,这就是为什么我说我的trim是trim(Mid(rptText,85,9))。有什么建议吗

如果语句在几行上出现问题,这在VBA中是不允许的。您需要使用下划线“\u1”字符(本例中为延续字符)让编译器知道这是一行代码:

If rptText Like "(0825)" And _
   Trim(Mid(rptText, 85, 9)) = "(0826)" And _
   Trim(Mid(rptText, 85, 9)) = "(0827)" And _
   Trim(Mid(rptText, 85, 9)) = "(0828)" And _
   Trim(Mid(rptText, 85, 9)) Then
正如Siddharth Rout提到的,你的逻辑有问题。修剪(Mid(rptText,85,9))无法等于“(0826)”和“(0827)”

试着这样做:

Dim ThisTextPart As String
ThisTextPart = Trim(Mid(rptText, 85, 6))

If rptText Like "*(0825)*" Or _
   ThisTextPart = "(0826)" Or _
   ThisTextPart = "(0827)" Or _
   ThisTextPart = "(0828)" Then

如果语句在几行上出现问题,这在VBA中是不允许的。您需要使用下划线“\u1”字符(本例中为延续字符)让编译器知道这是一行代码:

If rptText Like "(0825)" And _
   Trim(Mid(rptText, 85, 9)) = "(0826)" And _
   Trim(Mid(rptText, 85, 9)) = "(0827)" And _
   Trim(Mid(rptText, 85, 9)) = "(0828)" And _
   Trim(Mid(rptText, 85, 9)) Then
正如Siddharth Rout提到的,你的逻辑有问题。修剪(Mid(rptText,85,9))无法等于“(0826)”和“(0827)”

试着这样做:

Dim ThisTextPart As String
ThisTextPart = Trim(Mid(rptText, 85, 6))

If rptText Like "*(0825)*" Or _
   ThisTextPart = "(0826)" Or _
   ThisTextPart = "(0827)" Or _
   ThisTextPart = "(0828)" Then

这是一些有趣的代码,因为IF
Trim(Mid(rptText,85,9))中的这一行,您得到了错误,那么
您将Trim语句与什么进行比较?还有,如果你的情况没有意义。
Trim(Mid(rptText,85,9))=“0826”
Trim(Mid(rptText,85,9))=“0827”
如何同时为真?您想使用
还是
?这是您的一些有趣的代码。由于IF
Trim(Mid(rptText,85,9))中的这一行,您会遇到错误,那么
您将Trim语句与什么进行比较?还有,如果你的情况没有意义。
Trim(Mid(rptText,85,9))=“0826”
Trim(Mid(rptText,85,9))=“0827”
如何同时为真?您想在原始帖子中使用
还是
?+1:)顺便说一句,如果在一行中。包装由Trinimon完成,参见修订历史记录。另外,你们上面帖子中的另一个人是我:)谢谢,伙计们!我将尝试任何一种方案,看看是否可以让它运行。再次感谢所有的投入。:)+1:)顺便说一句,在最初的帖子中,IF是一行。包装由Trinimon完成,参见修订历史记录。另外,你们上面帖子中的另一个人是我:)谢谢,伙计们!我将尝试任何一种方案,看看是否可以让它运行。再次感谢所有的投入。:)