Microsoft Excel

Excel und VBA: Beitrag aus Herbers Excel-Forumsarchiv

Texte per VBA in einzelne Teile aufteilen

Betrifft: Texte per VBA in einzelne Teile aufteilen
von: Christian
Geschrieben am: 27.04.2007 17:22:06

Guten Abend,

ich habe ein Problem, und zwar jenes, dass ich eine Ordnerstruktur inkl. der Dateien per Makro herausladen und als Liste wiedergeben kann, aber diese nicht nicht als Text aufgeteilt in einzelne Zellen übertragen bekomme. Sprich, ich möchte jeden Ordnernamen in eine Zelle der selben Reihe aber anderen Spalte schreiben, so dass sich der Pfad darstellt und in der äußersten Spalte sich der Dateiname wiederfindet. Problem hierbei ist, dass die Pfade eine unterschiedliche Länge haben.

Weiß jemand, wie sich dass per VBA lösen lässt?

Grüße
Christian

  

Betrifft: AW: Texte per VBA in einzelne Teile aufteilen
von: Jens
Geschrieben am: 27.04.2007 17:32:07

Hallo Christian

Weiß zwar nicht, ob ich Dich richtig verstanden habe, aber muss es denn VBA sein?

Das kannst Du auch mit Daten-Text in Spalten lösen.

MfG

Jens


  

Betrifft: AW: Texte per VBA in einzelne Teile aufteilen
von: Christian
Geschrieben am: 27.04.2007 18:17:08

hallo Jens,

das habe ich versucht, aber hat sich als nicht wirklich praktisch erwiesen, da 1. die dateipfade unterschiedlich lang sind und 2. ich als eindeutiges Trennzeichen zwischen den Ordnerbezeichnungen nur ein "\" habe, z.B.

C:\1. Ordner\2. Ordner\3. Ordner\4. Odner\Dateiname.pdf
C:\1. Ordner\2. Ordner\3. Ordner\Dateiname.pdf
C:\1. Ordner\Dateiname.pdf

Ist es nicht einfacher, dieses mittels Makro die Orndernamen in 4 Spalten zu schreiben und den Dateinamen in eine 5.?

Gruß
Christian


  

Betrifft: AW: Texte per VBA in einzelne Teile aufteilen
von: Luschi
Geschrieben am: 27.04.2007 19:14:10

Hallo Christian,

von Nonet igbt es ein xla-Tool "FileLister".
siehe http://www.spotlight.de/zforen/mse/m/mse-1176491612-32660.html
Dort kann man auch das Tool herunterladen (Der Link funktioniert!).
Damit werden Dateien aus einem bestimmten Ordner einschließlich Sub-Ordner in der Excelrabelle aufgelistet.

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Texte per VBA in einzelne Teile aufteilen
von: Jens
Geschrieben am: 27.04.2007 19:15:07

Hi Christian

Bei "Text in Spalten" kannst Du aber als Trennzeichen aber auch ein "\" eingeben.
Allerdings bringt Dir das halt nicht alle Dateinamen in ein Spalte untereinander.

Über VBA ist das bestimmt möglich, allerdings stehe ich da nicht ganz so im Saft ;-)

Aber hier gibt es ja ne Menge kluger Köpfe hier im Forum :-)
Deshalb stell ich die Frage nochmal auf offen...

Gruß

Jens


  

Betrifft: AW: Texte per VBA in einzelne Teile aufteilen
von: Luc:-?
Geschrieben am: 28.04.2007 04:02:16

Hallo Christian,
entspricht das Folgende deinen Vorstellungen?
Hier sollte ein Bild stehen, aber momentan lässt sich aus unerfindlichen Gründen nicht mal so ein klitzekleines Gif-Bild auf den Server laden. Wartungsmodus war doch bisher hier nicht üblich!? Wie zum Hohn kommt dann auch noch der Standardfehlertext, der mir eigentlich nur bestätigt, dass ich alles genauso richtig gemacht habe wie früher auch. Trotz Überarbeitung der Forumssoftware doch eine Verschlechterung...?!
Na, dann muss es ohne Bsp gehen! Folg Fkt kann im Tabellenblatt oder in einem Makro eingesetzt _ wdn...


Option Explicit

Function Splint(Text, Optional Trenner As String = " ", Optional ByVal AnfPos As Long, _
                Optional ByVal EndPos As Long, Optional ByVal LetztEnd As Boolean)
    Dim i As Long, j As Long, l As Long, m As Long, TxtVkt, x, y() As String
    If AnfPos = 0 And EndPos = 0 Then Splint = Split(Text, Trenner): Exit Function
    TxtVkt = Split(Text, Trenner): m = UBound(TxtVkt) + 1
    If AnfPos = 0 Then AnfPos = 1: If EndPos = 0 Then EndPos = m
    l = EndPos - AnfPos: If l < 0 Then Exit Function
    ReDim y(l) As String
    For Each x In TxtVkt
        i = i + 1
        If i >= AnfPos And i <= m + CInt(LetztEnd) And _
            j <= l + CInt(LetztEnd) Then y(j) = x: j = j + 1
        If LetztEnd And (i = m Or j > l) Then y(l) = x: Exit For
    Next x
    Splint = y
End Function 


Als TabBl-Formel musst du für B3=c:\www\spotlight\excel\forum\suche\meister.html in die 1.Zelle einer Markierung von 6 Zellen die Matrixformel {=Splint(B3;"\";2;7;1)} eintragen. 2 bedeutet, dass erst ab dem 2.Teilstück ausgegeben wird, 7, dass 7 Teilstücke maximal ausgewertet wdn, 1, dass das letzte Teilstück stets in der letzten Zelle der Markierung steht. Die Fkt fkt nur pro Ausgangswert, d.h., Text darf nur 1 Zelle repräsentieren! Bei Einsatz in einem Makro hier eine Schleife verwenden.
Gruß Luc :-?
PS: Im TabBl bitte den besonderen Eintragungsmodus von Matrixformeln beachten!