Мне нужна помощь в устранении неполадок с макросом, который я написал для удаления строк из файлов CSV или TXT, если существует строка ввода пользователя.
Я объявил переменные для File1
, File2
, File3
и т. д., основанные на входном текстовом файле, который всегда имеет разные пути к файлам, которые необходимо искать.Эта часть кода работает.
В следующей части кода предполагается, что расширение файла каждого файла и на основе этого вызова правильная процедура.
Когда я запускаю кодв некоторых файлах, где первые 4 были .csv, а 5-й был .txt, в файлах csv ничего не происходило, но 5-й файл был сохранен как 4-й файл.
Кто-нибудь может увидеть, что я сделал неправильно?Вот?Приведенные ниже фрагменты кода:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Dim myOutput As String:
myOutput = "G:\Team Drives\Technology Team\Data Management\Admin\GDPR\tempoutput.txt"
If File1 <> "" Then
If Right$(File1, 3) = "csv" Then
Workbooks.Open File1
Call cleanCSV
Else
Open File1 For Input As #1
Call cleanTXT
File1.Close
ActiveWorkbook.Close
Kill myOutput
End If
End If
If File2 <> "" Then
If Right$(File2, 3) = "csv" Then
Workbooks.Open File2
Call cleanCSV
Else
Open File2 For Input As #1
Call cleanTXT
File2.Close
ActiveWorkbook.SaveAs fileName:=File2
ActiveWorkbook.Close
Kill myOutput
End If
End If
(выше приведено, чтобы можно было искать больше файлов) ...
Sub cleanCSV()
'removes rows in csv files where the entered email is found
Dim Cell As Variant
Dim SrchRng As Range
Set SrchRng = ActiveSheet.UsedRange
lastIndex = SrchRng.Rows.Count
For i = lastIndex To 1 Step -1
For Each Cell In SrchRng.Rows(i).Cells
If Cell.Value = SrchStr Then
Debug.Print
Cell.EntireRow.Delete
Exit For
End If
Next
Next
ActiveWorkbook.Close SaveChanges:=True
End Sub
Sub cleanTXT()
Dim str As String
'removes lines in text files where the entered email is found
Const myOutput As String = "G:\Team Drives\Technology Team\Data Management\Admin\GDPR\tempoutput.txt"
Open myOutput For Output As #2
Do Until VBA.EOF(1)
Line Input #1, str
If InStr(1, str, SrchStr) = 0 Then
Print #2, str
End If
Loop
End Sub
Любая помощь или направление будут чрезвычайно полезны!
Спасибо.