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

时间:2013-04-26 21:03:58

标签: excel excel-vba vba

在我提出问题之前,请允许我给你一些背景知识。我正在尝试解析一个大文本文件(250,000多页),并从中提取值。我正在使用特定变量来获取我正在寻找的值,如下所示。但是,我的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

你们所有人的帮助都会很棒,并提前感谢!

编辑:在尝试答案后,我需要解释一下。我引用的变量(0825,0826,0827,0828)用于解析长度为9个字符的值。以下是一些关于文件外观的示例:

(0825)461308108

(0826)921908109

我想要任何具有变量0825,0826等的值来获取这些值,这就是为什么我说我的修剪是Trim(Mid(rptText,85,9))。有什么建议?

1 个答案:

答案 0 :(得分:3)

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

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所说,你的逻辑存在问题。 Trim(Mid(rptText,85,9))无法等于“(0826)”AND“(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