0

在我的问题之前,让我给你一些背景知识。我正在尝试解析一个大型文本文件(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))。有什么建议么?

4

1 回答 1

3

你有你的问题 If 声明多行,这在 VBA 中是不允许的。您需要使用下划线“_”字符(在这种情况下为连续字符)让编译器知道这是一行代码:

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)”和“(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
于 2013-04-26T21:22:07.240 回答