2011-04-26 25 views
-1

問候,我希望能夠幫助確定如何將讀取的每一行文本文件作爲字符串存儲到VBA程序中。我想修改其中一個字符串,然後將它們全部放回到一起,但不知道如何通過文本文件讀取並以智能方式將每行存儲爲單獨的變量。感謝您的任何幫助,您可以提供!試圖在VBA中存儲文本文件行

+0

建議您先學習VBA,然後返回任何您遇到的編碼問題。您也可以嘗試在搜索引擎中輸入「讀取文本文件VBA」 – 2011-04-26 23:57:32

回答

1

查找到一個FileSystemObject(參考:123

你必須去到菜單和包括Microsoft Scripting Runtime並創建一個全局變量Global fso as New FileSystemObject。現在,您的代碼中的任何地方都可以執行諸如fso.OpenTextFile()之類的操作,並返回TextStream。每個文本流有方法魔神ReadLine()ReadAll()SkipLine()WriteLine()等..

VBA References

下面是一個簡單的示例代碼。

Sub TEST() 
    Dim ts As TextStream 
    Set ts = fso.OpenTextFile("text_file.txt", ForReading, False) 
    Dim s As String 
    s = ts.ReadAll() 
End Sub 
1

如果你不希望添加引用,你可以隨便去直VBA代碼。

就拿以下文件wordlist.txt

realize 
empty 
theorize 
line 
socialize 
here 
analyze 

下面的代碼使用兩種方法來爲你做描述(一個比其他普通):

Option Explicit 

Sub main() 
    Dim sFileName As String 
    Dim sMergedLineArray() As String 
    Dim sTextToFind As String 
    Dim sReplacementText As String 
    Dim sOutputFile As String 
    Const MY_DELIMITER = "|" 

    sFileName = "C:\deleteme\wordlist.txt" 

    sMergedLineArray = ReadFileIntoArray(sFileName) 

    sTextToFind = "ze" 
    sReplacementText = "se" 

    'Loop through each value in the array and make a change if you need to 
    Dim x As Integer 
    For x = 0 To UBound(sMergedLineArray) 
     If InStr(1, sMergedLineArray(x), sTextToFind, vbTextCompare) > 0 Then 
      sMergedLineArray(x) = Replace(sMergedLineArray(x), sTextToFind, sReplacementText, 1, -1, vbTextCompare) 
     End If 
    Next x 

    sOutputFile = "C:\deleteme\UK_Version.txt" 
    If Not SpitFileOut(sOutputFile, sMergedLineArray) Then 
     MsgBox "It didn't work :(" 
    End If 


    'OR...put it all together, make a mass change and split it back out (this seems unlikely, but throwing it in there anyway) 
    sTextToFind = "se" 
    sReplacementText = "ze" 
    Dim sBigString As String 
    Dim sNewArray As Variant 
    sBigString = Join(sMergedLineArray, MY_DELIMITER) 
    sBigString = Replace(sBigString, sTextToFind, sReplacementText, 1, -1, vbTextCompare) 

    sNewArray = Split(sBigString, MY_DELIMITER, -1, vbTextCompare) 

    sOutputFile = "C:\deleteme\American_Version.txt" 
    If Not SpitFileOut(sOutputFile, sNewArray) Then 
     MsgBox "It didn't work" 
    End If 

    MsgBox "Finished!" 

End Sub 


Function ReadFileIntoArray(sFileName As String) As String() 
    Dim sText As String 
    Dim sLocalArray() As String 
    Dim iFileNum As Integer 
    Dim iLineCount As Integer 

    iFileNum = FreeFile 

    Open sFileName For Input As #iFileNum 
    Do Until EOF(iFileNum) 
     Input #iFileNum, sText 
     ReDim Preserve sLocalArray(iLineCount) 
     sLocalArray(iLineCount) = sText 
     iLineCount = iLineCount + 1 
    Loop 

    Close #iFileNum 

    ReadFileIntoArray = sLocalArray 


End Function 


Function SpitFileOut(sFileName As String, sMyArray As Variant) As Boolean 
    Dim iFileNum As Integer 
    Dim iCounter As Integer 

    SpitFileOut = False 

    iFileNum = FreeFile 

    Open sFileName For Output As #iFileNum 
     For iCounter = 0 To UBound(sMyArray) 
      Print #iFileNum, sMyArray(iCounter) 
     Next 
    Close #iFileNum 


    SpitFileOut = True 
End Function 

如果你運行主分區,你將得到兩個文件:

  • UK_Version.txt:這是第一方法
  • American_Version.txt的結果:這是第二

結果有VBA,年輕學徒的課1;吸收它,學習並更改您的登錄名:P

+0

感謝您的幫助!非常有用的課 – dontknowvba 2011-04-27 19:49:20

+0

np。如果適用,請將plz標記爲答案。 – ray 2011-04-27 19:54:21