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

VBAでは許可されていない複数の行にIfステートメントの問題があります。アンダースコア "_" 文字 (この場合は継続文字) を使用して、これが 1 行のコードであることをコンパイラに知らせる必要があります。

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
于 2013-04-26T21:22:07.240 に答える