1

InStr を使用して配列の値を調べようとしています。ただし、偽陽性と偽陰性が発生しています。

つまり、文字列が一致しても一致が報告されないか、文字列が正確に一致しても一致が報告されません。

Outlook が必要です。強調表示された電子メールを、指定されたパスに配置されたテキスト ファイルに変換します。次に、テキストを配列に読み取り、配列の内容を検索することにより、テキスト ファイルで区切り記号を検索します。ただし、前述のように、部分文字列が配列内にある場合でも、InStr は偽陽性と偽陰性を返します。バイナリとテキストの比較方法とさまざまな比較文字列を試しました。

何か案は?

注: 1) InStr に不満を感じた後、if then ステートメントを使用して、配列を区切り文字列と比較しようとしました。これは、コードの最後の行に示されています。2)区切り文字を「xxxxx」に設定しました。これは、一連のobjfile.writeコマンドに続く行で確認できます。3) instr 関数でテキスト比較モードとバイナリ比較モードの両方を使用しようとしました。

3) 最終的な目標: a) Outlook から強調表示された電子メールを抽出し、1 つのテキスト ファイルに結合します。b) 電子メールのテキストに基づいて区切りテキスト ファイルを並べ替えます (区切り文字間のテキストに y が含まれている場合は配列 y に入れ、x の場合は...など) c) 指定した順序で配列を電子メールに出力します (例: x、y) 、z)

これは、電子メールが毎日異なる時間に到着するためですが、最終的な要約電子メールのために毎日同じ順序に編成する必要があるためです。

ありがとう。

以下は私のコードです:

Sub MergeTextFromSelectedEmailsIntoTextFile()
  Dim objFS As New Scripting.FileSystemObject, objFile As Scripting.TextStream
  Dim objItem As Object, strFile As String
  Dim wrapArray() As String

  If ActiveExplorer.Selection.Count = 0 Then Exit Sub

  strFile = InputBox("Please enter the full path and file name for the merged text:" _
    , "Enter File Name")

  Set objFile = objFS.CreateTextFile(strFile, False)

  If objFile Is Nothing Then
    MsgBox "Error creating file '" & strFile & "'.", vbOKOnly + vbExclamation _
      , "Invalid File"
    Exit Sub
  End If

  For Each objItem In ActiveExplorer.Selection

    objFile.Write vbCr
    objFile.Write (vbCr & Chr(10) & Chr(13) & ("xxxxx") & Chr(13) & Chr(13) & vbCr & vbLf)
    objFile.Write (vbCr & vbLf & objItem.Body)
    objFile.Write (vbCr & vbLf & Chr(13))
  Next
  objFile.Close

'Define variables for writing to array

Dim i As Integer
Set objFile = objFS.OpenTextFile(strFile, ForReading)
'write file contents to array
Do Until objFile.AtEndOfStream
ReDim Preserve wrapArray(i)
wrapArray(i) = objFile.ReadLine
i = i + 1
Loop
Dim xxxxx As String
xxxxx = xxxxx

'check each array index for contents
'note i have tried 
''if instr(0, wraparray(i), "xxxxx",0) then msgBox "FoundDelim at line " & i

For i = LBound(wrapArray()) To UBound(wrapArray())
    If wrapArray(i) = "xxxxx" Then MsgBox "FoundDelim! at line " & i
Next i
4

1 に答える 1

3

InStrは整数を返すため、関数の結果をブール値としてテストすると、一貫性のない動作が発生することに注意してください。これを試して:

If InStr(wrapArray(i),"xxxxx") > 0 Then
  MsgBox "FoundDelim! at line " & i
End If
于 2012-11-05T20:37:53.740 に答える