Comment supprimer des lignes de données où une chaîne se trouve?

voix
0

J'ai besoin d'aide pour résoudre une macro que je l'ai écrit à supprimer des lignes de fichiers csv ou txt si une chaîne d'entrée d'utilisateur existe.

Je l' ai déclaré variables pour File1, File2, File3etc. , qui sont basées sur un fichier texte d'entrée qui a toujours différents chemins de fichiers qui doivent rechercher. Cette partie du code fonctionne.

La prochaine partie du code est censé regarder l'extension de fichier de chaque fichier et en fonction de cet appel, la procédure correcte.

Quand je courais le code sur certains fichiers où les 4 premiers étaient .csv et le 5ème était txt, rien ne se passait dans les fichiers csv mais le 5 fichier a été enregistré en tant que fichier 4.

Quelqu'un est-il capable de voir ce que je l'ai fait mal ici? Extraits de code ci-dessous:

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 porte à permettre plus de fichiers à rechercher) ...

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

Toute aide ou direction seront très appréciés!

Merci.

Créé 18/12/2018 à 11:11
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Vous faites différents bits du même processus dans les différents sous-programmes, et se fondant sur l'ActiveWorkbook étant celui de droite, il est donc pas étonnant qu'il devient le mauvais fichier. Mettez votre code supérieur dans la forme

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

Maintenant, mettez tout le reste du code dans les deux sous-programmes:

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

et

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

En tant que principe général d'un fichier doit être fermé par la même routine qui l'ouvrit, et vous devriez toujours passer explicitement des pointeurs vers des classeurs en tant que arguments - ne reposent pas sur la ActiveWorkbook étant toujours celui que vous voulez quand votre routine est appelée.

Créé 18/12/2018 à 11:30
source utilisateur

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