Как удалить строки данных, в которых есть строка?

Я написал макрос для удаления строк из файлов csv или txt, если существует строка ввода пользователя.

Я объявил переменные для File1, File2, File3 и т. д., Которые основаны на входном текстовом файле, который всегда имеет разные пути к файлам, которые необходимо искать. Эта часть кода работает.

Следующая часть кода должна смотреть на расширение каждого файла и на основе этого вызывать правильную процедуру.

Когда я запускал код для некоторых файлов, где первые четыре были .csv, а пятый - .txt, в файлах csv ничего не происходило, но пятый файл был сохранен как четвертый.

Фрагменты кода ниже:

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
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
49
1

Ответы 1

Вы выполняете разные части одного и того же процесса в разных подпрограммах и полагаетесь на то, что activeworkbook является правильным, поэтому неудивительно, что он получает неправильный файл. Поместите свой главный код в форму

If File1 <> "" Then
    If Right$(File1, 3) = "csv" Then
        CleanCsv File1
    Else
        cleanTXT File1
    End If
End If

Теперь поместите весь остальной код в две подпрограммы:

Sub CleanCSV(filetoclean as string)
Dim wb as workbook
set wb = Workbooks.open(filetoclean)
Dim Cell As Variant
Dim SrchRng As Range
Set SrchRng = wb.sheets(1).UsedRange
'etc....
wb.close
end sub

и

Sub CleanTxt(filetoclean as string)
Open Filetoclean For Input As #1
Dim myOutput As String:
myOutput = "G:\Team Drives\Technology Team\Data Management\Admin\GDPR\tempoutput.txt"
etc...

Как правило, файл должен быть закрыт той же процедурой, которая открыла его, и вы всегда должны явно передавать указатели на книги в качестве аргументов - не полагайтесь на то, что активная книга по-прежнему будет той, которую вы хотите, когда ваша подпрограмма вызывается.

Спасибо ... Я попробую

Sonal 18.12.2018 12:45

Я сделал именно то, что было предложено, но теперь запуск кода дает мне ошибку «Несоответствие типа аргумента ByRef» и выделяет Файл1 после cleanCSV File1.

Sonal 18.12.2018 13:01

File1 - это строка? Если вы уже открыли его как текстовый поток, вы получите эту ошибку, но основная процедура не должна этого делать. Попробуйте запустить с помощью F8, чтобы пройти и посмотреть, каково значение файла 1.

Harassed Dad 18.12.2018 13:25

По какой-то причине теперь File1 оценивается как не имеющий значения, то же самое для File2. Но следующие файлы имеют правильный путь к файлу. Раньше он работал нормально (и я не касался этого кода), есть ли очевидная причина, по которой это могло произойти?

Sonal 18.12.2018 16:17

Какой код вы используете для установки File1 и как он затемнен?

Harassed Dad 20.12.2018 10:59

Другие вопросы по теме