2016-11-05 393 views
0

我正在使用vba宏在文本文件中查找大字符串。 爲此,我讀取文本文件,閱讀要比較的文本(將其保存在單元格中的一個單元格中)。之後,我會用CR替換CRLF(因爲保存的文本不包含CRLF)。然後比較。它的工作很好,如果文件大小更少。但是當文件大小很高(大約50 KB很好)時拋出錯誤。 有關文件最大大小的任何猜測?VBA Excel宏錯誤:1004無法獲得WorkbooFunction類的替代屬性

代碼的下面部分被投擲的錯誤

Open LogFilePath For Input As #iFile 
    strFileContent = Input(LOF(iFile), iFile) 
    Close #iFile 
    strFileContent = Application.WorksheetFunction.Substitute(strFileContent, vbCrLf, "") 
    strSearch = Application.WorksheetFunction.Substitute(strSearch, vbLf, "") 
    strFileContent = Application.WorksheetFunction.Substitute(strFileContent, vbTab, " ") 
    If InStr(1, strFileContent, strSearch, vbBinaryCompare) > 0 Then 
    SearchTextFile = "success" 
    Else 
    SearchTextFile = "failed" 
    End If 

enter image description here

任何猜測或建議,請。

+0

我剛剛測試過,第一個參數(也可能是其他參數)的大小有32,767字節的限制。我很驚訝你已經設法讓一個50Kb的文件工作。正如@AndyW在回答中所建議的那樣,使用VBA的'Replace'函數而不是'Application.WorksheetFunction.Substitute'。 – YowE3K

+0

單元格可以包含的字符總數:32,767個字符。所以我認爲'替代品'也是有限的。請參閱[Excel規範和限制](https://support.office.com/en-us/article/Excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3) –

+0

非常感謝您爲答覆。我正在嘗試大小超過200KB的文件。現在我檢查了32767byte和32768字節。 32768顯示錯誤,但32767沒有顯示任何錯誤 – user3710272

回答

2

我注意到的錯誤指的是替代屬性和您正在使用Application.WorksheetFunction.Substitute。

個人而言,在VBA我總是傾向於使用替換功能,在相同的方式工作。

處理一些大的.txt文件(20,000行/ 30MB)時,我也用這個並不會遇到與它的問題。

+0

非常感謝。我嘗試過你提到的Replace,現在它工作的很好。 – user3710272

1

Substitute更適用於例如與細胞公式。您應該嘗試使用Replace以下代碼段來滿足您的需求。

Private Sub CommandButton1_Click() 

Dim LogFilePath As String 
Dim ifile As Integer 

ifile = 1 

LogFilePath = "D:/_working/application-log-file-small.txt" 
strSearch = "Temp Path  :" 

Open LogFilePath For Input As #ifile 
    strFileContent = Input(LOF(ifile), ifile) 
    Close #ifile 
    '--- Show len of file content string ----- 
    MsgBox (Len(strFileContent)) 

    strFileContent = Replace(strFileContent, vbCrLf, "") 
    strSearch = Replace(strSearch, vbLf, "") 
    strFileContent = Replace(strFileContent, vbTab, " ") 

    If InStr(1, strFileContent, strSearch, vbBinaryCompare) > 0 Then 
    SearchTextFile = "success" 
    MsgBox ("success") 
    Else 
    SearchTextFile = "failed" 
    MsgBox ("failed") 
    End If 
End Sub 
+0

非常感謝。替換功能工作正常,我得到了結果。 – user3710272

相關問題