Access VBA Datensatz beim kopieren prüfen ändern

Hallo,

ich habe ein problem mit MS Access 2003 VBA.

Ich habe ein Formular mit einer Schaltfläche „Speichern & Weiter“.
Dabei wird vom Feld(renr) die daten in das Feld(gsrenr) in der gleichen Tabelle kopiert und ein Kürzel angefügt.

Das Feld(defg) soll nach Feld(gsdefg) kopiert und ein Kürzel angefügt werden.
Hier ist das Problem, die Daten haben teilweise vorne IAGS/BARE und teilweise hinten -IA/BA angehängt. Das muß beim kopieren, vor dem einfügen im neuen Feld, rausgefschnitten werden.

Es fehlt eine prüf und entfern schleife, die beim kopieren und einfügen checkt, ob die werte vorne und/oder hinten vorhanden sind, die dann rausschneidet, den kürzel anfügt und in das neue Feld(gsdefg) einfügt.

Code:
Private Sub save_next_Click()
On Error GoTo Err_save_next_Click
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

Me!gsrenr = „AL“ & Me!renr
Me!gsdefg = „AG“ (prüfen und ggf. entfernen von IAGS/BARE bzw. -IA/BA) & Me!defg

DoCmd.GoToRecord , , acNewRec
Exit_save_next_Click:
Exit Sub

Ich habe einiges mit trim, replace, remove… probiert aber nichts funktionierendes auf die beine gestellt.

Hi BSG (seltsamer Name),

um die Frage seriös zu beantworten, fehlen noch einige Informationen.
Generell: DU musst einfach systematisch so vorgehen, wie du den ‚richtigen‘ Inhalt mit dem Auge identifizieren würdest.
Übrigends könnte es mit „/“ oder „-“ Probleme geben.
In jedem Fall musst du Regeln aufstellen und befolgen.
Ich weiß aus Erfahrung, dass sich Sachbearbeiter/innen gegen alte Gewohnheiten streuben und nur schwer bereit sind Regeln einzuhalten.

Hallo,
schonmal danke für die Antworten.
War gestern recht spät hab daher Informationen „vergessen“.
Also im Feld sind Daten wie z.B.:
IAGS45B980 oder iags45C980
BARE45G980 oder bare45T980
45L980-IA oder 45D980ia
45R980BA oder 45P980-ba

Sie kommen teilweise auch gemischt vor wie z.B.
iags45980-BA oder BARE45980-ia

Es wurde einfach wahllos eingegeben. -> War(!) auch keine „Gültigkeitsprüfung“ hinterlegt.
Nach zahlen kann ich nicht trennen, da dazwischen auch Buchstaben sinddie gebraucht werden.
Einfach vorne oder hinten 4 bzw 3 zeichen abschneiden geht auch nicht, da hinten teilweise das „-“ fehlt und vorne manchmal nichts ist.

Ich muß also irgendwie beim kopieren die Daten prüfen ob die Werte IAGS, iags, BARE, bare vorne und -IA, -ia, ia, -BA, BA, -ba hinten da sind und diese dann rausfiltern.
Ich habe es mit replace versucht, bin aber an der if/then anordnung kläglich gescheitert…

Danke für die Hilfe.

Danke für die Hilfe.

OK - hilft schon etwas weiter.
Ich würde die Funktion:
If InStr(‚IAGS‘,‚iags‘,‚BARE‘,‚bare‘,’-IA’,’-ia’,‚ia‘,’-BA’,‚BA‘,’-ba’) verwenden.
Du bekommst dann die Position als Integer zurück, ab der die Zeichenfolge gefunden wurde.
Ist sie größer als 0 (oder 1 - weiß nicht mehr genau) weißt du dass die Zeichenfolge ‚hinten‘ steht und verwendest den vorderen Teil oder umgekehrt.
Hier auch mal ein interessanter Link zu Details dieser Funktion:
http://www.vbarchiv.net/commands/cmd_instr.html

Ich hoffe, du kannst damit dein Problem lösen?
Groß
Manfred

Hallo BSG,

Du könntest folgendermaßen vorgehen:

dim hfeld as string,i as integer

hfeld=Me!defg
i=instr(hfeld,„IAGS/BARE“)
if i>0 then
hfeld=mid(hfeld,10) ’ ab 10. Pos. übernehmen
end if
i=instr(hfeld,"-IA/BA")
if i>0 then
hfeld=mid(hfeld,1,i-1) ’ bis i-1. Pos. übernehmen
end if
ME!gsdefg= hfeld & Me!defg

Gruß
JOGI

Hallo
Ich würde das mit Split machen

Private Function Auswerten(ByVal Wert As String) As String
Dim Vorn() As String
Dim Hinten() As String
Dim Ergebnis As String
Ergebnis = Wert
Auswerten = Wert
On Error Resume Next

'Vorn abfragen
Vorn = Split(Ergebnis, „IAGS/BARE“)
If Err.Number 9 Then

'wenn die Splitfunction ins Leere läuft weil der 'entsprechende Wert 'IAGS/BARE’nicht gefunden wurde,
'wird ein Error ausgegeben welcher abgefangen wird

Ergebnis = Vorn(1)
'Im Array Vorn sollte jetzt Alles sein, das nach
'IAGS/BARE vorhanden ist
End If

'Hinten abfragen
Hinten = Split(Ergebnis, „-IA/BA“)
Ergebnis = Hinten(0)
If Err.Number 9 Then
Auswerten = Ergebnis
End If
Auswerten = Ergebnis
End Function

Verwenden:

Dim dummy As String
dummy = defg.Value 'Wert der ausgewertet werden soll
Dim Ergebnis As String
Ergebnis = Auswerten(dummy)

Gruß Wolfgang