Jak usunąć wierszy danych, gdzie znajduje się ciąg?

głosy
0

Potrzebuję pomocy w rozwiązywaniu problemów makro Mam napisany usunąć wiersze z csv lub txt plików jeśli ciąg wejściowy użytkownik nie istnieje.

I zadeklarowały zmiennych dla File1, File2, File3itd., Które są oparte na pliku tekstowym wejściowego, który zawsze ma różne filepaths, które muszą być przeszukane. Ta część kodu działa.

Kolejna część kodu ma wyglądać na rozszerzenie każdego pliku i na podstawie tej rozmowy prawidłowej procedury.

Kiedy wpadłem kod na niektórych plików gdzie pierwsze 4 były .csv i 5th był .txt, nic się nie stało w plikach csv ale 5th plik został zapisany jako 4. pliku.

Czy ktoś jest w stanie zobaczyć, co zrobiłem źle tutaj? Kod fragmenty poniżej:

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

(Aboves prowadzi do umożliwienia większej liczby plików do przeszukania) ...

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

Każda pomoc lub kierunek będzie bardzo mile widziana!

Dzięki.

Utwórz 18/12/2018 o 11:11
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Robisz różne fragmenty tego samego procesu w różnych podprogramów, a opierając się na activeworkbook stanowiącego właściwą, więc nic dziwnego, że coraz niewłaściwy plik. Przełączyć top kod do formularza

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

Teraz umieścić całą resztę kod do dwóch podprogramów:

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

i

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...

Zgodnie z ogólną zasadą plik powinien być zamknięty przez tę samą rutynę, że jego otwarcia, i zawsze należy wyraźnie przekazać wskaźniki do skoroszytów jako argumenty - nie polegać na activeworkbook nadal jest ten, który chcesz podczas rutynowych zostanie wywołana.

Odpowiedział 18/12/2018 o 11:30
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more