Syntax check mit VBA in Excel
21.11.2020 18:54:28
Werner
Ich hoffe Ihr könnt mir helfen, da ich nicht einmal den ansatz wüste, wo bzw. wie ich in VBA anfangen soll.
Ich habe zB. folgende mögliche Eingabewerte:
S-59001640421-2019,Legacy Bill Adjustment 20% TAX,0.82
RG20200000776629,Legacy Bill Adjustment 10% TAX,-3.3
S-59001662039-2020,Legacy Bill Adjustment 10% TAX,18.9
S-59001786077-2020,Legacy Bill Adjustment 0% TAX,5
Ich bekomme solche Angaben von meinen Kollegen und muss diese an unseren Entwickler nach Indien weiterleiten.
Wie Ihr erkennen könnt, handelt es sich hier um Änderungen in Rechnungen (von Kunden).
Und da muss der Syntax passen, sonst gibt es blaue Wunder - Wenn zB. die Zahl nicht im englischen Format geschrieben wird - also beim Komma einen Punkt - Gewohnheitsbedingt machen viele wie ich auch einen Beistrich und dann hab ich plötzlich 18.900 statt 18,90 in der Rechnung korrigiert - Katastrophe - Aber jetzt zum Punkt:
Am Anfang steht die Rechnungsnummer. Beinhaltet diese ein / muss es ersetzt werden durch einen -
Sie darf keine Leerzeichen beinhalten.
Nach oder vor den beiden Beistrichen darf kein Leerzeichen sein und wenn in der Zahl am Schluss ein Komma vorkommt, muss dieser zu einem Punkt ersetzt werden.
Im mittleren Teil müssen ebenfalls die Leerzeichen eingehalten werden, was leider auch nicht immer der fall ist.
Ich komme aus der PHP Programmierung und habe etwas Erfahrung mit regex - Ich hab das Teil leider nie wirklich verstanden und das bereue ich jetzt.
Das iTüpfelchen:
Die Überprüfung soll in der Zeile geschehen, in der ich diesen Inhalt einfüge. So eine Schleife habe ich schon in VBA für einen Anderen Check - Also Zeile ist immer bekannt.
Wenn der Syntax nicht stimmt, wäre es toll, wenn die Zelle eingefärbt werden könnte.
Der Grund: Ich bekomme manches mal 20 Zeilen oder mehr mit solchen Inhalten und kopiere diese dann ins Excel wo ich dann 20 oder mehr Zeilen damit befüllt habe - und da wäre dann so eine Einfärbung super toll.
Das habe ich bereits:
Public Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim Zelle As Range
Dim bereich As Range
Dim Formel
Set KeyCells = Range("B2:B1048576")
Set bereich = Application.Intersect(KeyCells, Target)
If Not bereich Is Nothing Then
For Each Zelle In bereich
' Reihe = Zelle.Row
' Spalte = Zelle.Column
If Sheets("Adjustments").Range("B" & Zelle.Row).Value = "" Then
Sheets("Adjustments").Range("A" & Zelle.Row).Value = ""
Sheets("Adjustments").Range("G" & Zelle.Row).Value = ""
Else
' Aktuelles Datum einfügen
Sheets("Adjustments").Range("A" & Zelle.Row).Value = Date
' Syntax check
' Formel einfuegen - verursacht leider einen Laufzeitfehler
Formel = "=WECHSELN(TEIL(B1150;FINDEN('TAX';B" & Zelle.Row & ";1)+4;FINDEN('TAX' _
_
;B" & Zelle.Row & ";1));'.';',')*1"
Sheets("Adjustments").Range("G" & Zelle.Row).FormulaLocal = Formel
End If
Next
End If
End Sub
Ich hoffe, ich war jetzt nicht zu unverschämt und freu mich schon auf Feedback