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