Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1944to1948
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

VBA Probleme mit der Funktion Replace

VBA Probleme mit der Funktion Replace
24.09.2023 20:07:00
Joschi Witchcraft
Hallo Forum.

Mit "Shell.Application" habe ich mir Dateieinformationen zu einem bestimmten Verzeichnis ermittelt.

xxx = objFiles.GetDetailsOf(FileName, MyIndex)

Die Ergebnisse wurden in einer Tabelle gespeichert,

Nun wollte ich mit den Werten rechnen, und stellte fest, dass sie nicht im Excel-Format "Date" gespeichert sind. Wenn ich eine der Zellen auslese, finden sich dort mehrere Fragezeichen. Nun habe ich versucht, die Fragezeichen durch "Replace" zu entfernen. Doch das gelingt mir nicht.

Meine Tabelle habe ich so verkleinert, dass nur noch ein paar Zeilen mit verschiedenen Datum- und Zeit-Informationen übrig geblieben sind.
https://www.herber.de/bbs/user/163084.xlsm

Mit einem Test-Makro habe ich versucht, die "?" zu entfernen. Das gelingt mir, wenn die Eingabe von einem String kommt, aber nicht, wenn ich es aus der Tabelle übernehme. Was läuft hier falsch?

Noch eine Zusatzfrage: wie kann ich die Umwandlung in ein Date-Format eleganter machen, als ich das gelöst habe?
Gruß Joschi

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Probleme mit der Funktion Replace
24.09.2023 21:12:55
Alwin Weisangler
Hallo Joschi,
die Fragezeichen sind unsichtbare Zeichen.
Suche nach: vba mit Replace unsichtbare Zeichen entfernen.
Wenn du sehen willst, welche Zeichen das sind, nimm Notepad++ und kopiere den Zelleinhalt aus Spalte D in Notepad. Da siehst du die Bescherung.

Gruß Uwe
AW: VBA Probleme mit der Funktion Replace
24.09.2023 21:18:19
Piet
Hallo

die beiden Zeichen "*" und "?" haben eine Sonderfunktion. Desswegen klappt das nicht mit dem Replace Dialog!
Das "?" ersetzt im Text einen beliebigen Buchstaben, das "*" besagt, finde x beliebige Zeichen nach dem "*".
Du kannst höchstens mit einem Makro Suchlauf die Zellen mit ? finden und anzeigen lassen. Bzw:. den Txt per Makro ändern.

mfg Piet


  • Sub test()
    For Each AC In Selection
    If InStr(AC, "?") Then AC.Select: MsgBox AC.Row
    Next AC
    End Sub
  • Anzeige
    AW: VBA Probleme mit der Funktion Replace
    25.09.2023 15:25:17
    Oberschlumpf
    Hi,

    hiermit...
    https://www.herber.de/bbs/user/163106.xlsm
    ...im Makro test, und NUR auf Spalte D bezogen, werden die Werte in D auch in echte Datumswerte konvertiert.

    Hilfts?

    Ciao
    Thorsten
    AW: VBA Probleme mit der Funktion Replace
    25.09.2023 18:14:46
    Joschi Witchcraft
    Hallo Thorsten.

    Deine Antwort gefällt mir. Der Code ist übersichtlich, und ich mit meinem Basis-Wissen habe ihn vollkommen verstanden. Außerdem wird die jeweilige Zelle auf das Format "Datum" umgestellt.

    Damit ist mein Problem eigentlich erledigt. Trotzdem würde es mich interessieren, warum die Abfrage nach "?" nicht funktioniert hat.

    Gruß - und nochmals vielen Dank für die Unterstützung

    Joschi
    Anzeige
    AW: VBA Probleme mit der Funktion Replace
    25.09.2023 19:20:17
    Alwin Weisangler
    Ich habs mal angepasst und mit ein paar kleinen Beschreibungen versehen.
    
    
    Sub UPlus200EundFRaus()
    Dim arrSp(), Var$, i&, j&, iSpalte&, lz&
    With Tabelle1 ' Modulname des Tabellenblattes kein Blattname
    For iSpalte = 4 To 7
    lz = .Cells(Rows.Count, iSpalte).End(xlUp).Row ' letzte Zeile derSchleife iSpalte (Spalte D bis G)
    arrSp = .Range(.Cells(1, iSpalte), .Cells(lz, iSpalte)).Value 'füllt as Array
    For i = 1 To UBound(arrSp) 'Schleife Zeile für Zeile
    For j = 1 To Len(arrSp(i, 1)) ' Schleife Zeichen für Zeichen der Arrayzelle
    ' Übernahmebedingung: Prüfen auf numerischen Wert oder Prüfen auf Punkt oder Prüfen auf Doppelpunkt
    If IsNumeric(Mid(arrSp(i, 1), j, 1)) Or Mid(arrSp(i, 1), j, 1) = "." Or Mid(arrSp(i, 1), j, 1) = ":" Or Mid(arrSp(i, 1), j, 1) = " " Then
    Var = Var & Mid(arrSp(i, 1), j, 1) 'Treffer in die Variable schreiben
    End If
    Next j
    arrSp(i, 1) = CDate(Var) 'echtes Datum - kein Text Schreiben des String in die Arrayzelle
    'arrSp(i, 1) = Var 'Datum als Text
    Var = ""
    Next i
    Tabelle1.Cells(1, iSpalte).Resize(UBound(arrSp, 1), UBound(arrSp, 2)) = arrSp ' Schreibt die Werte des Arrays on Block entsprechend der Dimensionen des Arrays in die Zellen.
    Next iSpalte
    End With
    End Sub


    Gruß Uwe
    Anzeige
    AW: VBA Probleme mit der Funktion Replace
    25.09.2023 20:38:42
    Joschi Witchcraft
    Hallo Uwe.

    Jetzt habe ich den Bezug zu "Tabelle1." verstanden. Problem ist in meinen Augen dabei nur, dass kaum jemand eine Ahnung davon hat, welches seiner Tabellenblätter "Tabelle1." ist. Und unbemerkt wurden die geänderten Daten bei meinen Versuchen mit Deinem Code aus der aktuellen Tabelle geholt, aber in die "Tabelle1." eingefügt.

    Ich habe beim Löschen verschiedener Tabellenblätter vermutlich auch die "Tabelle1." gelöscht. Das hat zur Folge, das in der Zeile
    lz = .Cells(Rows.Count ......
    ein Laufzeitfehler 424 entsteht.

    Auch nach dem Speichern und erneuten Öffnen habe ich nun trotzdem keine 'Tabelle1.". Die habe ich erst erhalten, nachdem ich ein neues Blatt erstellt hatte. Verwirrend ist, dass der Standardname für ein neues Blatt ebenfalls "Tabellex" und somit auch ggf. "Tabelle1" ist.

    Auch wenn Dein Code - nach kleinen Anpassungen hinsichtlich Tabellenblatt - nun funktioniert, ist der Code von Thorsten doch übersichtlicher, und sorgt gleichzeitig dafür, dass die geänderte Zelle nun das richtige Format annimmt.

    Gruß Joschi.
    Anzeige
    AW: VBA Probleme mit der Funktion Replace
    24.09.2023 22:24:18
    Alwin Weisangler
    Ich hab grad mal selbst rum gesucht und festgestellt, dass man sich besser an die auswertbaren Zeichen im String hält.
    So wirst du die unsichtbaren Zeichen los:
    
    
    Sub UPlus200EundFRaus()
    Dim arrSp(), Var$, i&, j&
    arrSp = Range("D1:D" & Cells(Rows.Count, 4).End(xlUp).Row).Value
    For i = 1 To UBound(arrSp)
    For j = 1 To Len(arrSp(i, 1))
    If IsNumeric(Mid(arrSp(i, 1), j, 1)) Or Mid(arrSp(i, 1), j, 1) = "." Or Mid(arrSp(i, 1), j, 1) = ":" Or Mid(arrSp(i, 1), j, 1) = " " Then
    Var = Var & Mid(arrSp(i, 1), j, 1)
    End If
    Next j
    arrSp(i, 1) = Var
    Var = ""
    Next i
    Tabelle1.Cells(1, 4).Resize(UBound(arrSp, 1), UBound(arrSp, 2)) = arrSp
    End Sub


    Gruß Uwe
    Anzeige
    AW: VBA Probleme mit der Funktion Replace
    25.09.2023 12:33:18
    Joschi Witchcraft
    Hallo alle, die mir geantwortet haben.

    Ich verstehe das noch immer nicht.

    Den Code von Uwe habe ich dahingehend erweitert, dass ich bei der "If"-Abfrage eine "Else" Bedingung eingefügt habe, und dort auf "Stop" gehe. Bei keinem Durchlauf ist er auf "Stop" gegangen. Es wurden also keine fehlerhaften Daten erkannt.

    Ich habe mir den Inhalt meiner Variablen nach der Übertragung aus der Tabelle in Hex ausgedruckt. Da sind mir nur die Fragezeichen (X"3F") aufgefallen. Meine gefüllte Variable sieht damit genauso aus, wie meine Konstante (bei der ich allerdings ein paar "?" vergessen hatte; sorry.

    3F 31 37 2E 3F 30 35 2E 3F 32 30 32 33 20 3F 3F *?17.?05.?2023 ??*

    Auch ein Export meiner Tabelle hat mich nicht weitergebracht. In den exportierten Daten sind nur die reinen Werte zu sehen.

    Letzter Versuch: den Inhalt einer Zelle mit "kopieren" in den Zwischenspeicher geladen und dann in einen Hex-Editor eingefügt. Jetzt erst sehe ich die Bescherung: das was mir als "?" angeboten wird, ist in Wirklichkeit ein X"00".

    Warum finde ich dann in meiner Variablen nicht dieses X"00" sondern das Fragezeichen?
    Und warum funktioniert der Replace bei dem Wert aus der Konstanten, aber nicht bei dem (gleich aussehenden) Wert aus der Tabelle?

    Und =CODE($E$10) in der Tabelle zeigt mit "49" an. Warum. In dieser Zelle steht "17.09.2023 15:16"
    Auch "=GLÄTTEN(SÄUBERN(E10))" hat kein brauchbares Ergebnis gebracht.

    Gruß Joschi
    Anzeige
    AW: VBA Probleme mit der Funktion Replace
    25.09.2023 15:09:12
    Alwin Weisangler
    Hallo Joschi,

    es sind unsichtbare Zeichen im Unicode Formatierungszeichen U+200E und U+200F (nach rechts/nach links).
    In meiner Prozedur kann kein Fehler mehr auftauchen, da die Wenn-Abfrage lässt nur Ziffern und ein Leerzeichen zwecks Trennung Datum/Uhrzeit falls du es weiter verwursten willst zu und übergibt es in einen neuen String. Das Ganze wird in der j Schleife Zeichen für Zeichen abgefragt.
    Die Ausgabe ist dann ein korrekter Datums/Zeit String.

    Gruß Uwe
    AW: VBA Probleme mit der Funktion Replace
    25.09.2023 16:28:54
    Joschi Witchcraft
    Hallo Uwe.

    Dein Code hat bei mir nicht funktioniert, weil ich außerhalb meiner bereitgestellten Mappe mehrere Tabellenblätter habe.

    In Deinem Code sind Dinge enthalten, mit denen ich sehr wenig Erfahrung habe: Grundsätzlich habe ich alles verstanaden. Lediglich den letzten Befehl verstehe ich nicht:

    1. wie müsste folgender Code aussehen, wenn ich die Spalten D bis G bearbeiten möchte?
    arrSp = Range("D1:D" & Cells(Rows.Count, 4).End(xlUp).Row).Value

    2. Welche Tabelle wird mit "Tabelle1" angesprochen; meine Mustermappe hatte nur eine "Tabelle2".

    Das Problem bei den "Profis" ist, dass sie möglichst wenige Code haben wollen. Dadurch ist es für einen weniger erfahrenen Anwender oft nicht durchschaubar. was hier passiert.

    Unabhängig von Deinem Code stellt sich die Frage, warum die Abfrage in meinem Makro auf das nachweislich vorhandene Fragezeichen nicht funktioniert.

    Gruß Joschi
    Anzeige
    AW: VBA Probleme mit der Funktion Replace
    24.09.2023 21:17:07
    Alwin Weisangler
    zur Ergänzung - es sind Unicode Formatierungszeichen U+200E und U+200F.

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige