Anzeige
Archiv - Navigation
1900to1904
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ich verstehe den code nicht vom kollegen

Ich verstehe den code nicht vom kollegen
13.10.2022 12:00:59
Pieter
Hey, kann mir jemand mal den Code bitte erklären.
ich verstehe unteranderem ab der for schleife nicht, merci
Sub Start(SearchFileName As String)
Dim fs As Object
Dim fVerz As Object
Dim fDatei As Object
Dim fdateien As Object
Dim XLSSavePath As String
Dim XLSLoadPath As String
Dim ErrMsg As String
On Error GoTo Catch
XLSLoadPath = FilePathSrlFahrplaene
XLSSavePath = FilePathImport
Set fs = CreateObject("scripting.FileSystemObject")
Set fVerz = fs.getFolder(XLSLoadPath)
Set fdateien = fVerz.Files
For Each fDatei In fdateien
If InStr(fDatei, SearchFileName) > 0 And fDatei.Type = "Microsoft Excel 97-2003 Worksheet" Then
Workbooks.Open Filename:=fDatei.Path
Blatt_ergaenzen
WorkbookSaveAs fDatei.Name, XLSLoadPath
WorkbookSaveAs fDatei.Name, XLSSavePath
ActiveWorkbook.Close SaveChanges:=False
fDatei.Delete
End If
DoEvents
Next fDatei
Exit Sub

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ich verstehe den code nicht vom kollegen
13.10.2022 12:32:03
Der
Hallo,
was genau verstehst Du nicht? Das was im Makro Blatt_ergaenzen steht sehen wir aber auch nicht ...
Ansonsten wird hier nur eine/mehrere Datei(en) gesucht, geöffnet ... irgendwas ergänzt ... und in zwei verzeichnissen gespeichert und dann gelöscht ...
Gruß
Michael
AW: Ich verstehe den code nicht vom kollegen
13.10.2022 13:15:10
Pieter
Hmm bitte noch eine Frage,
wenn ich im sub suche mit Platzhalter
Sub Start("hallo*")
Sub Start(Like"hallo")
beides funktioniert nicht ?
wie mache ich es richtig
AW: Ich verstehe den code nicht vom kollegen
13.10.2022 13:22:58
ralf_b
das liegt auch ein bisschen daran wie die sub "start" aussieht
"hallo*" bedeutet das ein Text vorkommen muß der mit "hallo" beginnt.
Start(Like"hallo") Like steht außerhalb der Anführungszeichen und ist somit kein Teil des Suchtextes. Das könnte schon zum Fehler führen weil wahrscheinlich ein Text erwartet wird und kein logischer Ausdruck. Start("*hallo*") wäre hier passender. Wobei das immer drauf ankommt wie der übergebene Text ausgewertet wird.
Anzeige
AW: Ich verstehe den code nicht vom kollegen
13.10.2022 13:30:12
Pieter
das blöde ist , mit * funktioniert es nicht und mit like auch nicht .
also geht nicht aber das * wird nicht als Platzhalter gesucht sonder als zeichen
also wenn ich den sub ("Hallo*")
suche dann taucht die o.g. quellcode auf
AW: Ich verstehe den code nicht vom kollegen
13.10.2022 13:38:15
ralf_b
siehe Beitrag von Daniel. Ich hab den sub-Namen aus deinem Eingangspost überlesen. Instr() vergleicht als schon wie ein Like.
AW: Ich verstehe den code nicht vom kollegen
13.10.2022 14:09:24
Daniel

Instr(Text1, "ABC") > 0 
hat das gleiche Ergebnis wie

Text1 LIKE "*ABC*"
Gruß Daniel
AW: Ich verstehe den code nicht vom kollegen
13.10.2022 13:30:45
Daniel
Hi
Der Code braucht keine Platzhalter, sondern ist schon so programmiert, Fass der als Parameter übergebene Text im Dateinamen enthalten sein muss:

If InStr(fDatei, SearchFileName)  > 0
Instr ermittelt die Position des zweiten Textes im ersten Text und gibt 0 aus, wenn der erste zweite Text nicht im ersten Text enthalten ist.
Instr("xxxABCxxx", "ABC") ergibt 4
Instr("xxxABCxxx", "DEF") ergibt 0
Joker sind nicht zulässig, dh "*" ist das Zeichen "*"
Gruß Daniel
Anzeige
AW: Ich verstehe den code nicht vom kollegen
13.10.2022 13:53:50
Pieter
Ok verstehe,
wie mache ich das
Wenn ich sagen will
Platzhalter
Wenn *Searchfilename* im Ordner X
Dann
gefunden = "gefundername"
öffne die gefundene datei
vielen dank bisher wirklich ...
AW: Ich verstehe den code nicht vom kollegen
13.10.2022 14:13:31
Daniel
Was bedeuten die "*" bei: "Wenn *Searchfilename* im Ordner X"
Sollen das Joker sein für beliebigen weiteren Text oder sind es echte Zeichen und du suchst genau nach diesem Text mit den "*" als vorhandene Zeichen?
Gruß Daniel
AW: Ich verstehe den code nicht vom kollegen
13.10.2022 14:19:55
Pieter
Ne das soll als Joker fungieren.
Ich habe jetzt :
****
a = FilePathImport & "\" & SearchFileName
For Each fDatei In fdateien
If fDatei Like a Then
*****
jedoch findert er das nicht ( das einzige was noch dazu kommt, hinter > ist eine datum bspw. 20221014 ... und mit like erkennt er das nicht wieso auch immer ,ich bekomme die krise echt ...
Anzeige
AW: Ich verstehe den code nicht vom kollegen
13.10.2022 14:24:28
Pieter
Option Explicit
Public Const FilePathSrlFahrplaene = "C:Hallo"
Public Const FilePathImport = "C:import"

Sub StartAll()
Dim i As Integer
For i = 0 To 10
DoEvents
Application.Wait (Now + TimeValue("0:00:01"))
Next
Application.DisplayAlerts = False
Start ("SRL_VVS_SRL_")
Start ("SRL_TE017_")
Application.DisplayAlerts = True
For i = 0 To 10
DoEvents
Application.Wait (Now + TimeValue("0:00:01"))
Next
Application.Quit
End Sub

Sub Start(SearchFileName As String)
Dim fs As Object
Dim fVerz As Object
Dim fDatei As Object
Dim fdateien As Object
Dim XLSSavePath As String
Dim XLSLoadPath As String
Dim ErrMsg As String
On Error GoTo Catch
XLSLoadPath = FilePathSrlFahrplaene
XLSSavePath = FilePathImport
Set fs = CreateObject("scripting.FileSystemObject")
Set fVerz = fs.getFolder(XLSLoadPath)
Set fdateien = fVerz.Files
For Each fDatei In fdateien
If InStr(fDatei, SearchFileName) > 0 And fDatei.Type = "Microsoft Excel 97-2003 Worksheet" Then
Workbooks.Open Filename:=fDatei.Path
Blatt_ergaenzen
WorkbookSaveAs fDatei.Name, XLSLoadPath
WorkbookSaveAs fDatei.Name, XLSSavePath
ActiveWorkbook.Close SaveChanges:=False
fDatei.delete
End If
DoEvents
Next fDatei
Exit Sub
Catch:
ErrMsg = "Error # " & Str(Err.Number) & " was generated by " & Err.Source & Chr(13) & "Error Line: " & Erl & Chr(13) & Err.Description
ActiveWorkbook.Close SaveChanges:=False
End Sub

Sub Blatt_ergaenzen()
Dim LastRow As Long
'LastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
LastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
' erste Spalte einfügen
Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
' Datum in die erste Spalte vor die Uhrzeit kopieren
Range("D1").Select
Selection.Copy
Range("A18:A" & LastRow - 1).Select
ActiveSheet.Paste
' letzte Zeile löschen, da BoFiT sonst einen Fehler anzeigt
LastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
Rows(LastRow & ":" & LastRow).Select
Selection.delete Shift:=xlUp
End Sub

Sub WorkbookSaveAs(Name As String, SavePath As String)
Dim FilePathName As String
' Datei im xlsx-Format abspeichern
If InStrRev(Name, ".") >= 1 Then Name = Left(Name, InStrRev(Name, ".") - 1)
FilePathName = SavePath & "\" & Name & ".xlsx"
' Datei löschen falls sie existiert
If Dir(FilePathName)  "" Then Kill FilePathName
ActiveWorkbook.SaveAs Filename:=FilePathName, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
End Sub
Und so sieht eine Datei aus :
Name SRL_TE017_20220927
ich denke mit realen bedingungen ist es am besten,
es erkennt den namen nicht ..
Anzeige
AW: Ich verstehe den code nicht vom kollegen
13.10.2022 14:38:22
Daniel
Hi
Lege mal in der Mappe mit dem Makro ein neues Blatt an und gib ihm den Namen Test.
Erweitere den Code dann so mit den zwei Zeilen, die mit ThisWorkbook beginnen.
Zeige uns dann mal das Ergebnis im Blatt Test.
Wenn du das Makro mehrfach laufen lässt, leere das Blatt vorher.

 For Each fDatei In fdateien
Thisworbook.Sheets("Test").cells(Rows.count, 1).End(xlup).offset(1, 0).Resize(1, 3) = Array(Search filename, fDatei, fDatei.Type)
If InStr(fDatei, SearchFileName) > 0 And fDatei.Type = "Microsoft Excel 97-2003 Worksheet" Then
Thisworbook.Sheets("Test").cells(Rows.count, 1).End(xlup).offset(0, 4) = "bearbeitet"
Workbooks.Open Filename:=fDatei.Path
Blatt_ergaenzen
Gruß Daniel
Anzeige
AW: Ich verstehe den code nicht vom kollegen
13.10.2022 14:53:50
peterk
Hallo
"C:Hallo" ist keine Pfadangabe!
Vielleicht : "C:\Hallo\"
Peter
AW: Ich verstehe den code nicht vom kollegen
13.10.2022 13:50:06
snb
Man kann auch reduzieren (zu viel überflüssige Variabelen):

Sub Start(SearchFileName As String)
For Each it In CreateObject("scripting.FileSystemObject").getFolder(FilePathSrlFahrplaene).Files
If InStr(it.Name, SearchFileName) And Right(it.Name, 4) = ".xls" Then Name XLSLoadPath & it As FilePathImport & it
Next
Ebd Sub

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige