2015-05-12 49 views
0

我正在將一些舊的宏從Word 2003轉換爲Word 2013.我想我只需要構建一個花哨的Ribbon Bar並完成它,但顯然不是。使用VBA讀取TXT文件突然不再起作用

以下代碼應該讀取TXT文件的全部內容並將其放入剪貼板。 這是我如何創建對象並撥打電話到我的功能:

Dim MyData As DataObject 
Set MyData = New DataObject 
MyData.SetText LoadTextFile("C:\TESTDOCS\readthisfile.txt") 
MyData.PutInClipboard 

這是實際的功能:

Public Function LoadTextFile(sFile As String) As String 
    Dim iFile As Integer 
    On Local Error Resume Next 

    iFile = FreeFile 

    Open sFile For Input As #iFile 

    LoadTextFile = Input$(LOF(iFile), iFile) 
    Close #iFile 


End Function 

之後,我發現了以下錯誤:

Run-time error '-2147024809 (80070057)': 
DataObject:SetText Invalid Argument. 

正如我所說:這段代碼在Word 2003中使用相同的文件工作得很好。

+0

你試過調試嗎? – PaulFrancis

+0

是的,它運行通過LoadTextFile就好了,然後當它試圖將字符串傳遞給MyData.SetText時出現錯誤 – PectoralisMajor

+1

因此,使用MyData.SetText「Hello World」工作? – PaulFrancis

回答

0

根據你的錯誤,我建議你一次讀一行文本文件,循環直到EOF(文件結束)。這會給你更多的靈活性。這裏是你需要如何修改你的LoadTextFile方法才能正確,

Public Function LoadTextFile(sFile As String) As String 
On Error GoTo errHandler 
    Dim iFile As Integer, strIn As String, tmpStr As String 

    Open sFile For Input As #iFile 

    Do While Not EOF(iFile) 
     Line Input #iFile, tmpStr 
     strIn = strIn & tmpStr 
    Loop 

    LoadTextFile = strIn 
exitHandler: 
    Close #iFile 
    Exit Function 
errHandler: 
    MsgBox "Error (" & Err.Number & ") - " & Err.Description & vbCrLf & vbCrLf & "Exiting LoadTextFile Method.", vbInformation 
    Resume exitHandler 
End Function 
+0

感謝您的努力,但這讓我感到無限循環。它讀取文件的位,然後顯示錯誤0,錯誤20,錯誤0 .... – PectoralisMajor

+0

非常感謝,現在它的工作原理! :) – PectoralisMajor

+0

很高興幫助:) – PaulFrancis