Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Zeilen löschen (wieder mal)
#1
Hallo


Es ist wieder mal soweit dass ich mich an ein Makro wage.
Leider läuft mein Versuch nicht ganz durch.
Es wäre toll wenn jemand mir einen kleinen Schubs geben könnte.

Ich habe folgendes Problem.
Periodisch muss in einer Log-Datei nach bestimmte Werte analisiert werden.
In der Log-Datei (.txt) ist allerdings zusätzlich eine Menge Datenmüll.
Ich möchte diesen Datenmüll löschen, damit die Nutzdaten sichtbar werden.

Ueber die Suchfunktion habe ich eine Menge ähnlicher Fälle gefunden.

So habe ich mich an die Arbeit gemacht und ein anderes (eigenes) Makro etwas umgeändert.
Einen Teil aus dem I-net geklaut und eingefügt.
Leider das Makro nicht durch.

Die Log-Datei soll in Excel importiert werden.
Gerne alles in eine Spalte A.
Dann sollen Zeilen welche mit z.b.: Dialing* beginnen oder in welchen irgendwo CALLED vorkommt behalten werden.
  (Diesen Teil des Markros habe ich geklaut oder besser gesagt: übernommen und angepasst.)
Es wäre von Vorteil wenn der Name der Log_Datei - den Namen der Ausgagngsdatei (txt-Format) schon vorgeben würde.
  ( dies müsste bereits in dem Teil des eigenen Makros enthalten sein )

Das Makro bleibt stehen bei:
   Dim SheetName = "Tabelle1"      Es ist eigentlich égal wie die Seite heist.

   Dim SearchColumn = "A"          Das hiess in dem geklautenen Makro: SUchSpalte
   Dim Searchtext =
Die Zeilen sind auch rot markiert und es erscheint ein "Compile error" - EXPECTED: END OF STATEMENT


Ob der/die/das Makro bis ansonsten zum Schluss durchlaufen würde hoffe ich.

Es wäre toll wenn jemand mir sagen könnte, wo der Hund begraben liegt:


Besten Dank.

Freundliche Grüsse

Code:
Sub delete()

' Created 30.11.2016.
'
' Keyboard Shortcut: Ctrl+f
'
Dim varName As Variant
Dim strName As String
Dim Neuer_Dateiname As String
Dim strTabname As String

Dim loletzte As Long
Dim strPfad As String

'Pfad festlegen
strPfad = "C:\delete\"
'Laufwerk und Pfad zum Öffnen vorgeben
ChDrive "C"
ChDir strPfad

'Datei-Öffnen-Dialog aufrufen
varName = Application.GetOpenFilename("Text-Dateien (*.txt),*.txt")

'Letztes \ ermitteln um Pfad und Dateiname zu trennen
strName = Right$(varName, Len(varName) - InStrRev(varName, "\"))

'Letzten . ermitteln um Dateiname und Erweiterung zu trennen
strName = Left(strName, InStrRev(strName, ".") - 1)

'import aus txt datei
   Workbooks.OpenText Filename:=varName, Origin:=xlMSDOS, StartRow _
       :=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
       ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
       , Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
       TrailingMinusNumbers:=True
   Columns("A:A").ColumnWidth = 67.29

'letzte Zeile in Spalte A im aktiven Blatt ermitteln
loletzte = ActiveWorkbook.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

'Name des aktiven Arbeitsblattes in Variable schreiben
strTabname = ActiveWorkbook.ActiveSheet.Name

   
  Dim SheetName = "Tabelle1"

  Dim SearchColumn = "A"
  Dim Searchtext = "*NETM*, Dialing*, REDIRECTED*, CALLING*, *CALLED*"


Sub DeleteLine()
    Dim Text As Variant, Found As Boolean, i As Long, EndLine As Long, s As Integer

    Sheets(SheetNamen).Activate

    EndLine = Cells(Rows.Count, SuchSpalte).End(xlUp).Row

    Text = Split(Searchtext, ",")

    Application.ScreenUpdating = False


    For i = 1 To EndLine
        If i > EndLine Then Exit For
        Found = False
        For s = 0 To UBound(Text)
            If Cells(i, SearchColumn) Like Trim(Text(s)) Then Found = True:  Exit For
     Next
     If Found = False Then Rows(i).Delete:  i = i - 1:  EndLine = EndLine - 1
    Next
    Application.ScreenUpdating = True


'Speichern-unter Dialog aufrufen
Neuer_Dateiname = Application.GetSaveAsFilename(InitialFileName:=strPfad & strName & ".txt", fileFilter:="Excel-Arbeitsmappe, *.txt")
'falls Abbrechen gedrückt wird, Makro verlassen
If Neuer_Dateiname = "Falsch" Then
'Meldung Makroabbruch
MsgBox "Workbook not saved!", 48, "Abort by user"
Exit Sub
Else
'aktive Arbeitsmappe speichern
ActiveWorkbook.SaveAs Filename:=Neuer_Dateiname, FileFormat:=51
End If
End Sub
Antworten Top
#2
Hallo,

Zitat:Das Makro bleibt stehen bei:
   Dim SheetName = "Tabelle1"      Es ist eigentlich égal wie die Seite heist.

   Dim SearchColumn = "A"          Das hiess in dem geklautenen Makro: SUchSpalte
   Dim Searchtext = 
Die Zeilen sind auch rot markiert und es erscheint ein ... 

So funktioniert DIM auch nicht. Versuche es mal mit SET, da wird eher ein Schuh draus.
Merkwürdigerweise setzt Du doch in den Makros an anderen Stellen die Dim-Anweisungen
richtig ein (alles nur geklaut???)

Ich habe den Code nicht weiter untersucht, weil ich lieber mit einer Datei arbeite.
Hier kann man dann auch testen, was da passiert.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
[-] Folgende(r) 1 Nutzer sagt Danke an Käpt'n Blaubär für diesen Beitrag:
  • PaulB
Antworten Top
#3
Hola,

verlinkst du bitte deine Beiträge in den verschiedenen Foren untereinander?
Danke.

Gruß,
steve1da
Antworten Top
#4
Smile 
Danke Käpt'n Blaubär

Das Makro läuft jetzt durch.

Das Resultat ist jedoch unübersichtlich, weil jetzt durch die Löschung der unerwünschten Zeilen alle Erignisse der Log-File zusammen gerückt wurde.
Soweit ist eine logische Folge.

Ich möchte nun einen Zeilenwert (Dummy) zusätzlich (erstmal) behalten.
Alle dafür in Frage kommende Werte liegen allerdings inmitten der jeweiligen Zeilen, d.h. der Filterwert ist in dem Fall z.b.: *Netm*

Anschliessend möchte eine Kommadozeile nachschieben welche llediglich den ganzen Zeileninhalt in welcher *NetM* vorkommt löscht.
Dadurch bleibt dann zwischen den Ereignissen der Log-File eine Leerzeile und allse ist gut :19:

Etwa so in diesem Sinne. Allerdings ist auch hier wieder etwas was klemmt.

  'delete Zeileninhalt

   If Cells(i, x).Text = "*Netm" Then Cells(i).ClearContents

Ich bräuchte nochmal einen kleinen Schubs

Danke

mfg
Antworten Top
#5
Hallo Paul,

hast Du das auch gelesen?

Zitat:Ich habe den Code nicht weiter untersucht, weil ich lieber mit einer Datei arbeite.
Hier kann man dann auch testen, was da passiert.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#6
Hallöchen,

ich habe mir jetzt nur Deine letzte Frage mit dem Schubs angeschaut.
Code:
If Cells(i, x).Text = "*Netm" Then Cells(i).ClearContents

Ich könnte mir vorstellen, dass da ein Komma und ein x fehlen. Vergleiche mal die beiden Cells ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste