String ersetzen

rwerene

Grünschnabel
Tag auch, ich komme einfach nicht mehr weiter.

Ich habe eine Tabelle:

Feld1 Feld2
01 soigobvnrobv
02 aspfjpovuwpogk
03 üpsdvksßpvi
04 psiojgpij
06 pcowlföivwelrhj

Jetzt soll immer nach dem 5 Zeichen die drei folgenden Zeichen ersetzt werden (hier in fett).
Ich hatte mir das so mit eine Abfrage gedacht:


Feld1 Feld2:Mid_funktion(Feld2)
tabelle


Code zu Mid_funktion


Function Mid_funktion(Feld2 As String) As String



If Mid(Feld2, 6, 3) = "obv" _
Then Mid(Feld2, 6, 3) = "Mar"


If Mid(Feld2, 6, 3) = "pov" _
Then Mid(Feld2, 6, 3) = "Oct"


If Mid(Feld2, 6, 3) = "ksß" _
Then Mid(Feld2, 6, 3) = "May"


If Mid(Feld2, 6, 3) = "gpi" _
Then Mid(Feld2, 6, 3) = "Dec"


End Function


Das klappt so nicht, wo ist der Fehler?

LG Im Vorraus
RWErene
 
Die Frage ist, was genau nicht klappt, der Code an sich ist einwandfrei. Gibts eine Fehlermeldung, wird der Text falsch ersetzt oder sonst irgendetwas?

Poste doch auch mal die Prozedur, wo du den Code aufrufst, der Fehler kann ja auch darin liegen. Hast du auch alle Variablen, die du verwendest auch dimensioniert?


Der Doc!

PS: Verwende für Code in Postings dir entsprechenden Code-Tags, für VB sind das [code=vb] und [/code]. Der Code liest sich dann leichter und sieht besser aus.
 
Uhmmm...

Du sollst ab dem 5. Zeichen die folgenden 3 Zeichen ersetzen?

Was ist an dieser Funktion dann falsch?

If Mid(Feld2, 6, 3) = "obv" Then

Richtig, du fragst ab dem 6. Zeichen ab, und dann ergibt diese Funktion natürlich immer 0 und der Code springt nicht hinters "Then"

Edit: In deinem Fall würde ich aber eher mit InStr arbeiten, dadurch würde die starre Parametrisierung entfallen.
 
Sorry, verstehe das einfach nicht.

Vielleicht mehr zu meinem Problem.
Ich habe eine Tabelle in der das Datum im folgende Format als Tex-String hinterlegt ist: "18 Dez 2008" (Inklusieve "" "", die werden aber auch gebraucht). Für ein anderes System muss ich aber "18 Dec 2008" liefern, also englisches Datumsformat. Das gleiche Problem habe ich bei den Monaten "Mrz"--> "Mar", "Mai"--> "May" und "Okt"--> "Oct".

Da ich kein VBA spezialist oder Crack bin tu ich mich mit der Programmierung sehr schwer, gerade was es mit Rückgabeparameter auf sich hat.

Hab jetzt schon allerlei Sachen ausprobiert:

Visual Basic:
Function datum_umwandeln_auch_alt(Datum As String)

Dim Monat_mar As String

Monat_mar = Datum

Dim Monat_mai As String
Dim Monat_Okt As String
Dim Monat_Dez As String

Monat_mar = Replace(Datum, "Mrz", "Mar", 5, 1)
Monat_mai = Replace(Datum, "Mai", "May", 5, 1)
Monat_Okt = Replace(Datum, "Okt", "Oct", 5, 1)
Monat_Dez = Replace(Datum, "Dez", "Dec", 5, 1)



End Function
___________________________________________________________________


Visual Basic:
Function datum_umwandeln_alt(Datum As String)

Dim Monat As String


Select Case Mid(Datum, 5, 3)
    Case Is = "Mrz"
      
        If Mid(Datum, 5, 3) = "Mrz" _
            Then
               
                Monat = "Mar"
                
        End If
        
    Case Is = "Mai"
      
        If Mid(Datum, 5, 3) = "Mai" _
            Then
               
                Monat = "May"
                
        End If
           
     Case Is = "Okt"
      
        If Mid(Datum, 5, 3) = "Okt" _
            Then
               
                Monat = "Oct"
                
        End If

     Case Is = "Dez"
      
        If Mid(Datum, 5, 3) = "Dez" _
            Then
               
                Monat = "Dec"
                
        End If



End Select
    
datum_umwandeln = Monat



End Function

Die Funktioniert soweit, dass das komplette Datum "18 Mrz 2008" durch Mar ersetzt wird :)

________________________________________________________________________
Visual Basic:
Function datum_umwandeln(Datum As String)


If Mid(Datum, 5, 3) = "Mrz" _
Then Mid(Datum, 5, 3) = "Mar"


If Mid(Datum, 5, 3) = "Okt" _
Then Mid(Datum, 5, 3) = "Oct"


If Mid(Datum, 5, 3) = "Mai" _
Then Mid(Datum, 5, 3) = "May"


If Mid(Datum, 5, 3) = "Dez" _
Then Mid(Datum, 5, 3) = "Dec"


End Function

Hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiilfe
 
Dir ist bekannt das Anführungszeichen (welche du ja anscheinend mit übergibst) auch ein Zeichen des ASCII-Zeichensatzes sind, und somit mitgezählt werden müssen, um die Startposition zu finden?

Hast du schon mal
Monat_mar = Replace(Datum, "Mrz", "Mar", 6, 1)
versucht?

BTW: Wenn die Variable Datum immer dasselbe String-Format hat, würde ich eh keine Start-Position angeben.
Monat_mar = Replace(Datum, "Mrz", "Mar")
 
Hab es nun so probiert, klappt aber auch nicht.

Visual Basic:
Function datum_umwandeln(Datum As String) As String

    datum_umwandeln = Replace(Datum, "Mrz", "Mar")
    datum_umwandeln = Replace(Datum, "Mai", "May")
    datum_umwandeln = Replace(Datum, "Okt", "Oct")
    datum_umwandeln = Replace(Datum, "Dez", "Dec")


End Function

Datum ist der Feldname der Tabelle. In der Abfrage wird nun in der Kopfzeile der Spalte die Prozedur wie folgt aufgerufen: datumsvormat: datum_umwandeln([Datum])
 
Bist du mal im Einzelschritt durch die Funktion gegangen, und mal kontrolliert, ob überhaupt für "Datum" ein gültiger String übergeben wird?
 
Wie rufst du die Funktion datum_umwandeln genau auf? Das ist die Frage, da man sie auf zweierlei Art aufrufen kann:

1) Wenn der/die Rückparameter mit ByRef übergeben werden (ist Standard, wenn nichts angegeben)
Visual Basic:
'der Aufruf der Funktion aus einer Prozedur
dDatum = "abcdeMay125"
datum_umwandeln dDatum
'jetzt steht das Ergebnis in der Variable dDatum, das wäre hier "abcdeMai125"

'die Funktion
Function datum_umwandeln(Datum As String) As String
'kann man auch so schreiben:
'Function datum_umwandeln(ByRef Datum As String) As String
 Datum = Replace(Datum, "Mrz", "Mar")
 Datum = Replace(Datum, "Mai", "May")
 Datum = Replace(Datum, "Okt", "Oct")
 Datum = Replace(Datum, "Dez", "Dec")
End Function

2) Wenn der Rückparameter aus der Funktion erfolgen soll, die Werte werden dann ByVal übergeben
Visual Basic:
'der Aufruf der Funktion aus einer Prozedur
dDatum = "abcdeMay125"
nDatum = datum_umwandeln(dDatum)
'jetzt steht das Ergebnis in der Variable nDatum, das wäre hier "abcdeMai125"

'die Funktion
Function datum_umwandeln(ByVal Datum As String) As String 'ByVal muss hier  angegeben werden
 datum_umwandeln = Replace(Datum, "Mrz", "Mar")
 datum_umwandeln = Replace(datum_umwandeln, "Mai", "May")
 datum_umwandeln = Replace(datum_umwandeln, "Okt", "Oct")
 datum_umwandeln = Replace(datum_umwandeln, "Dez", "Dec")
End Function

Daher ist der Aufruf wichtig, je nachdem wie du die Variablen empfängst (bzw. auch abhängig davon übergibst) musst der Aufruf anders erfolgen. Eine Kombination von ByRef und ByVal ist möglich.


Der Doc!
 
Hab es nun so probiert, klappt aber auch nicht.

Visual Basic:
Function datum_umwandeln(Datum As String) As String

    datum_umwandeln = Replace(Datum, "Mrz", "Mar")
    datum_umwandeln = Replace(Datum, "Mai", "May")
    datum_umwandeln = Replace(Datum, "Okt", "Oct")
    datum_umwandeln = Replace(Datum, "Dez", "Dec")


End Function

Auf diese Weise rufst Du die gleiche Funktion natürlich rekursiv immer wieder auf, ohne dass die eigentliche Variable wirklich verändert wird. Versuch es so:

Visual Basic:
Function datum_umwandeln(Datum As String) As String
    Dim TmpDat As String
    TmpDat = Datum
    TmpDat = Replace(TmpDat, "Mrz", "Mar")
    TmpDat = Replace(TmpDat, "Mai", "May")
    TmpDat = Replace(TmpDat, "Okt", "Oct")
    TmpDat = Replace(TmpDat, "Dez", "Dec")
    datum_umwandeln = TmpDat

End Function
 
@ronald: Seit wann wird eine Funktion rekursiv aufgerufen, wenn der Funktionsname links vom Gleichheitszeichen steht? :confused:


BTW: Verschlimmbesserung-Vorschlag ^^
Visual Basic:
Function datum_umwandeln(Datum As String, Von As String, Nach As String) As String

    datum_umwandeln=Replace(Datum, Von, Nach)

End Function
'Aufruf dann mit
DatumNeu=datum_umwandeln(Datum, "Mrz", "Mar")
 
Zuletzt bearbeitet:
Zurück