Office: VBA Zeichencode Problem

Helfe beim Thema VBA Zeichencode Problem in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo Ich habe ein Programm in welchem Orden , Unterordner und die dazugehörigen Dateien eingelesen und geprüft werden. Nun ist es so, das das... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von andysmith, 4. April 2011.

  1. andysmith Erfahrener User

    VBA Zeichencode Problem


    Hallo

    Ich habe ein Programm in welchem Orden , Unterordner und die dazugehörigen Dateien eingelesen und geprüft werden. Nun ist es so, das das Programm an Dateinamen scheitert, welche im Bsp. in Tschechien mit deren Zeichencode erstellt wurden. Das Problem an der Sache ist, das beim einlesen der Datei bzw. Ordner Name an unseren Zeichencode angepasst wird, aber beim verarbeiten diese Datei bzw. der Ordner nicht gefunden wird.
    Wie kann man ein derartiges Problem via VBA abfangen??

    Bsp:
    nach dem einlesen=
    ZMENY V ZÁKL. PLÁNU.pdf

    Dateiname original = ZMĚNY V ZÁKL. PLÁNU.pdf

    Für mich ist das Thema ziemlich grundsätzlich weil in meinem Bereich sind viele Ordner & Dateinamen mit deutschen Umlauten die spätestens im engl. Bereich genauso schief laufen.....

    Vielen Dank für die Hilfe!
     
    andysmith, 4. April 2011
    #1
  2. miriki Erfahrener User
    Ähm... Ich seh da gerade keinen Unterschied... Ah, doch, das 3. Zeichen E, ja?

    Wie werden denn die Dateinamen (im VBA) geholt? Da wird ja wahrscheinlich eine Application.FileSearch-Schleife laufen, oder?

    Und wie werden sie weiter benutzt? Da müßte dann ja was mit .FoundFiles(i) verwandtes vorkommen, oder?

    Ich glaub eigentlich eher nicht so recht, daß auf dem Weg irgendwo eine Zeichen-Konvertierung durchgeführt wird. Aber vielleicht kannst Du das etwas konkreter beschreiben...

    Gruß, Michael
     
    miriki, 4. April 2011
    #2
  3. miriki Erfahrener User
    Nachtrag:

    Das Zeichen "Ä" mag im amerikanischen zwar nicht vorkommen und dort als "[" (glaube ich, bin mir jetzt aber nicht ganz sicher) angezeigt werden. Es ändert aber nichts daran, daß es der gleiche Zeichencode ist und bleibt. Beeinfflußt wird also nur das Aussehen des Zeichens, abhängig von der Codepage einerseits und dem verwendeten Font andererseits.

    Gruß, Michael
     
    miriki, 4. April 2011
    #3
  4. andysmith Erfahrener User

    VBA Zeichencode Problem

    Folgende Formeln verwende ich:

    Pfad einlesen:

    Code:
    Private Function DirArray(strRoot As String)
        Dim strVerzeichnisname As String
        Dim lngAnzahlVerzeichnis As Long
        Dim lngStart As Long, i As Long
        
        If Right(strRoot, 1) <> "\" Then strRoot = strRoot & "\"
        
        lngAnzahlVerzeichnis = UBound(strVerzname)
        lngStart = lngAnzahlVerzeichnis
        strVerzeichnisname = Dir(strRoot & "*.", vbDirectory)
        Do While Len(strVerzeichnisname)
            If Left(strVerzeichnisname, 1) <> "." Then
                If GetAttr(strRoot & strVerzeichnisname) And vbDirectory Then
                    lngAnzahlVerzeichnis = lngAnzahlVerzeichnis + 1
                    ReDim Preserve strVerzname(lngAnzahlVerzeichnis) As String
                    strVerzname(lngAnzahlVerzeichnis) = strRoot & strVerzeichnisname
                End If
            End If
            strVerzeichnisname = Dir()
        Loop
        
        If lngStart < lngAnzahlVerzeichnis Then
            For i = lngStart + 1 To lngAnzahlVerzeichnis
                DirArray (strVerzname(i))
            Next i
        End If
        Exit Function
    End Function
    Dateien der Pfade einlesen:

    Code:
    'erinlesen der Dateien im Unterverzeichnis
        strDateiEndung = "*.*"
        lngArrIndex = 0
        ReDim strDateiNamen(lngArrIndex)
        If Right(strVerzname(lngFolderzaehler), 1) <> "\" Then strVerzname(lngFolderzaehler) = strVerzname(lngFolderzaehler) & "\"
        strDateiName = Dir(strVerzname(lngFolderzaehler) & strDateiEndung)
        Do While strDateiName <> ""
            lngArrIndex = lngArrIndex + 1
            ReDim Preserve strDateiNamen(lngArrIndex)
            strDateiNamen(lngArrIndex) = strDateiName
            strDateiName = Dir
        Loop
    
    Dateibehandlung:

    Code:
    dtmFileErstellDatum = CreateObject("Scripting.FileSystemObject").GetFile(strVerzname(lngFolderzaehler) & strDateiNamen(lngDateizaehler)).DateCreated
    dtmFileAccessDatum = CreateObject("Scripting.FileSystemObject").GetFile(strVerzname(lngFolderzaehler) & strDateiNamen(lngDateizaehler)).DateLastAccessed
    dtmFileAenderDatum = CreateObject("Scripting.FileSystemObject").GetFile(strVerzname(lngFolderzaehler) & strDateiNamen(lngDateizaehler)).DateLastModified
     
    andysmith, 4. April 2011
    #4
  5. miriki Erfahrener User
    Ich hab mal versucht, aus den Angaben mit einigen notwendigen Erweiterungen ein laufendes Tool zu stricken. Herausgekommen ist dabei das Ding im Anhang.

    Ich habe einige marginale Änderungen an dem Code durchgeführt. Die bezogen sich weitestgehend auf Probleme mit Option-Base (0 oder 1).

    Ich würde noch 1, 2 Änderungen vorschlagen, aber dazu später...

    Nach Buttonklick zeigt mir das Tool jetzt auf dem Worksheet den Inhalt von c:\temp und dessen Unterordnern. Ich hatte jetzt nicht so wirklich die Möglichkeit, Dateinamen aus anderen Codepages zu testen, aber das kannst Du ja vielleicht machen.

    Theoretisch dürfte, wenn überhaupt, bei Dir nur ein Fehler in der Zeile
    Code:
    dtmFileErstellDatum = CreateObject(...
    auftreten. Dort wird das erste mal versucht, die Datei mit dem gespeicherten Dateinamen anzusprechen. Bei meinen Dateien hier konnte ich zumindest keinen Fehler (re)produzieren.

    Ich hatte allerdings "Datei nicht gefunden" Fehler, während ich das Gerüst um Deine Routinen herum gebastelt hatte. Die ließen sich aber auf Probleme mit Option-Base-1 zurückführen bzw. waren ursächlich in der Initialisierung der Zähler-Variablen begründet. Komische Dateinamen waren dafür nicht verantwortlich.

    Noch die angesprochenen Änderungen:

    a) Du wirfst alles weg, was mit "." anfängt. Das ist nicht unbedingt so ganz sinnvoll. Teste eher auf "." und ".." als Verzeichnis. Datei- und auch Verzeichnisnamen können nämlich sehr wohl mit einem "." anfangen. In der linux-Welt ist das einfach nur das "hidden" Attribut.

    b) Du suchst bei den Verzeichnissen mit dem Wildcard "*." und ignorierst dabei alle Verzeichnisse wie z.B. "Temp.dir". Denn nicht nur Dateien, auch Verzeichnisse können mit "." abgetrennte Erweiterungen haben.

    Gruß, Michael
     
    miriki, 5. April 2011
    #5
  6. andysmith Erfahrener User
    Vielen Dank für diese ausführliche Schilderung und Mühe die Du Dir gemacht hast. Ich werde mir das morgen genauer ansehen und an der zwar mittlerweile umbenannten Datei testen. Die Hintergründe des Dateisystems waren mir dann doch nicht so bewusst. Ich werde dieses Wissen in Zukunft mit berücksichtigen.
    Das Thema "Option Base 1" ist mir jedoch nicht so schlüssig, weil ich denke, das hier nur die Perspektive der Zählreihenfolge eine Rolle spielt. Ob man nun mit eins oder null beginnt zu zählen, sollte nicht unbedingt eine Rolle spielen. Diesen Fakt habe ich zumindest versucht zu beachten. strVerzname(0) z.B. ist in meinem Fall das root Dir in dem ich beginne. Dort sind bzw. können ja schon die ersten Files vorhanden sein.
    Letztendlich soll meine Lösung dazu beitragen, in einer Verzeichnisstruktur nach Dateileichen zu suchen, um diese dann auf einen externen Datenträger zu verschieben. Massgebend hierbei ist das Date(x) seit dem sie nicht mehr benutzt wurde(n).
    In diesem Zuge habe ich schon einiges dazu lernen müssen. Z.B. war meine Annahme das Dateinamen unter Windows (Linux Werte kenne ich derzeit nicht, würde mich aber auch interessieren) max. 256 Zeichen haben dürfen falsch! So bildet sich für mich neuerdings dieser Wert aus Pfad & Dateinamen zusammen (VBA Error am Dateinamen).
    Das spezielle dat Files von Lotus Notes ein erstell usw. Datum aus dem Jahres 1613 vorweisen können und die Datum Protokollierung in Excel damit ein Problem hat war dabei noch einfach zu verstehen. Ironischerweise würde ich sagen sind heute doch die Möglichkeiten in Sachen Zeitreisen besser als ich annahm... :-)

    So long....

    Andy
     
    andysmith, 5. April 2011
    #6
  7. miriki Erfahrener User
    Mir fehlten ja ein paar Informationen, was Du "rundrum" um die von Dir geposteten Routinen so machst. Ich hatte dann einfach versucht, irgendwas drumherum zu basteln und hab schliußendlich das gleiche gemacht: im Element 0 ist das Root, ab 1 dann die Unterordner. Insofern paßt es. Durcheinander kommt man aber dann bei den Dateinamen in den Verzeichnissen. Dort wird erst bei 1 begonnen, das Array zu füllen.

    a) zähler auf 0 setzen
    Schleife:
    b) zähler erhöhen
    c) Dateiname speichern

    Das könnte man natürlich umgehen, wenn man den Zähler mit -1 initialisiert. Beide Varianten kriegt man aber auch nur sauber gehandhabt, indem man konsequent nicht nur mit UBound, sondern auch mit LBound arbeitet.

    Yep, kann ich bestätigen, auch wenn mir jetzt nicht auf Anhieb eine Quelle dafür einfallen würde. Aber mit dem Stichwort "ntfs" oder "fat" bzw. "fat32" müßte man was finden.

    Für Linux könnte ich Dir das so auch nicht sagen. Da müßte man eigentlich was in der Gegend um "samba" herum was fiinden können. Da man unter linux ja aber komplette Festplatten auch mal eben in ein tiefes Unterverzeichnis einmounten kann, schätze ich mal, daß die Beschränkung dort bedeutend großzügiger ist.

    Oh, echt? Ist mir noch gar nicht aufgefallen. Muß ich nachher doch gleich mal gucken...

    Hehe, ja... Und bedenke: Heute ist morgen schon gestern!

    Gruß, Michael
     
    miriki, 6. April 2011
    #7
Thema:

VBA Zeichencode Problem

Die Seite wird geladen...
  1. VBA Zeichencode Problem - Similar Threads - VBA Zeichencode Problem

  2. VBA - Wert in einer Spalte finden und diese Zeile löschen

    in Microsoft Excel Hilfe
    VBA - Wert in einer Spalte finden und diese Zeile löschen: Moin moin ihr Lieben, ich habe nun schon im Netz nach einer Lösung gesucht, aber nichts passendes oder funktionstüchtiges gefunden. Ich habe eine Tabelle mit Spalten A - G. Nun soll Excel in der...
  3. Freigegebene Excel-Tabelle als Quelle für Seriendruck

    in Sonstiges
    Freigegebene Excel-Tabelle als Quelle für Seriendruck: Hallo, :) wir haben eine Excel-Tabelle, welche auf der Cloud liegt und bei Änderungen automatisch speichert. Es haben mehrere Personen Lese- und Schreibrechte und sobald jemand etwas abändert,...
  4. VBA: Kein "Undo" mehr möglich?

    in Microsoft Excel Hilfe
    VBA: Kein "Undo" mehr möglich?: Hallo, ich habe meine Bestell-Tabelle so abgeändert, dass einiges per Makro, bzw. mittels Buttons übertragen wird. Also zum Beispiel wird mit einem Klick auf den Button die Lieferadresse gleich...
  5. EINLADUNG Access-Stammtisch Hannover Nr. 63 LIVE am Mittwoch 19.11.2025

    in Microsoft Access Hilfe
    EINLADUNG Access-Stammtisch Hannover Nr. 63 LIVE am Mittwoch 19.11.2025: EINLADUNG zum Access-Stammtisch Hannover Nr. 63 LIVE Endlich ist es wieder soweit! Persönlicher Austausch bei Speis und Trank. Interessante Gespräche in netter Atmosphäre. Termin: Mittwoch,...
  6. VBA: Notizen in Zelle einfügen

    in Microsoft Excel Hilfe
    VBA: Notizen in Zelle einfügen: Hallo zusammen, ich möchte über cells(x,y).AddComment "Text" eine Notiz einfügen. Das funktioniert leider nur sehr unzuverlässig. Mal ist der Text in der Notiz, mal wird nur eine leere Notiz...
  7. ActiveX Steuerelemente nicht verfügbar im VBA Entwurfsmodus.

    in Microsoft Excel Hilfe
    ActiveX Steuerelemente nicht verfügbar im VBA Entwurfsmodus.: Guten Tag allerseits. Ich habe eine Excel-Anwendung (xlsm mit Macros), die auf einem Laptop Probleme macht. Auf allen anderen PC's läuft es perfekt, auf dem genannten Laptop scheitern Zugriffe auf...
  8. VBA: Datei Upload mit http: POST

    in Microsoft Excel Hilfe
    VBA: Datei Upload mit http: POST: Hallo, schönen Gruß an alle; ich hoffe jemand hat einen Hinweis wo ich ansetzen kann. Problembeschreibung: · VBA aus Excel (das muss auch so bleiben) und funktioniert anscheinend ja auch...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden