0

XML ファイルでいっぱいのフォルダーを読み取り、参照番号を特定の形式 (今日の日付 (yymmdd)、イニシャル、00000001 から始まる 8 桁の参照) に変更しようとしています。

例: 120815AB00000001、次に 120815AB00000002 など。各ファイルには 1 つの参照番号があります。<CPAReferenceNumber>タグで囲みます。

Excel と VBA を使用してファイルを読み取り、関連するフィールドを変更しています。参照はデフォルト値に設定されます (以下のコードでは、'This' を 'That' に変更します)。

このコードは、1 つの個別のファイルに対して機能し、正しい変更を行います。ファイルの名前はランダムで、命名規則はありません。これをフォルダー内のすべての XML ファイルに展開することはできません。どんな助けでも大歓迎です。

Sub ReplaceStringInFile()


Dim sBuf As String
Dim sTemp As String
Dim iFileNum As Integer
Dim sFileName As String



sFileName = "c:\Search and Replace Files\blah.XML"
iFileNum = FreeFile

Open sFileName For Input As iFileNum
    Do Until EOF(iFileNum)

            Line Input #iFileNum, sBuf
            sTemp = sTemp & sBuf & vbCrLf

    Loop


Close iFileNum
sTemp = Replace(sTemp, "THIS", "THAT")

iFileNum = FreeFile

Open sFileName For Output As iFileNum
Print #iFileNum, sTemp

Close iFileNum

End Sub

ヘルプの後、以下のコードに変更しましたが、これによりエラーが発生しています: sFileName はコンテキストから外れています。テキストの変更は、xml ファイルには適用されません。

Sub ReplaceStringInFile()

Dim sBuf As String
Dim sTemp As String
Dim iFileNum As Integer
Dim sFileName As String
Const sSearchString As String = "c:\blah\*.xml"
Const directoryString As String = "c:\blah\"


iFileNum = FreeFile

sFileName = Dir(sSearchString)

Do While sFileName <> ""

      Open directoryString & sFileName For Input As iFileNum

        Do Until EOF(iFileNum)

                Line Input #iFileNum, sBuf
                sTemp = sTemp & sBuf & vbCrLf

        Loop


        Close iFileNum
        sTemp = Replace(sTemp, "IDNUMBER", "******SUCCESS!!!!!!******")

        iFileNum = FreeFile

        Open sFileName For Output As iFileNum
        Print #iFileNum, sTemp

        Close iFileNum

        Debug.Print "Do something with file named " & sFileName
        sFileName = Dir()

Loop


End Sub
4

2 に答える 2

2

コマンドを使用しDirてファイルを検索します。

次の例では、のすべてのXMLファイルをループしてC:\Temp、ファイル名(パスなし)を返します。

Const sSearchString As String = "c:\temp\*.xml"
Dim sFileName As String

sFileName = Dir(sSearchString)
Do While sFileName <> ""
    Debug.Print "Do something with file named " & sFileName
    sFileName = Dir()
Loop

さて、あなたの元のコードと私のDirループを組み合わせると、私の環境で機能するものが得られます。うまくいけば、それはあなたのために機能します。忘れてしまったのはsFileName、フルパスではなくファイル名のみが含まれていることです。そのため、読み取ったファイルとは異なるファイルに書き込みDo While sFileName <> ""、同時にループを混乱させた可能性があります。

Sub ReplaceStringInFile()

    Const sSearchString As String = "c:\temp\*.xml"

    Dim sBuf As String
    Dim sTemp As String
    Dim iFileNum As Integer
    Dim sFileName As String
    Dim sFilePath As String


    sFileName = Dir(sSearchString)

    Do While sFileName <> ""

        sFilePath = "c:\temp\" & sFileName  'Get full path to file
        iFileNum = FreeFile
        sTemp = ""  'Clear sTemp

        Open sFilePath For Input As iFileNum

            Do Until EOF(iFileNum)

                Line Input #iFileNum, sBuf
                sTemp = sTemp & sBuf & vbCrLf

            Loop

        Close iFileNum

        sTemp = Replace(sTemp, "THIS", "THAT")

        iFileNum = FreeFile

        Open sFilePath For Output As iFileNum
        Print #iFileNum, sTemp

        Close iFileNum

        sFileName = Dir() 'Get the next file
    Loop
End Sub
于 2012-08-15T13:08:52.930 に答える