# Werte aus den Zellen gezielt wählen und schreiben lassen



## theva (24. August 2017)

Ich versuche seit Tagen ein Problem zu lösen.
Scheint sehr einfach zu seien, aber kriege es einfach nicht hin. Kurz davor auszurasten. Also eine Hilfe wäre mir sehr sehr super..

Ich möchte die Excel-Datei, welche ich hochladen werden, in vba lesen lassen und gezielt nach Wunsch in externe Datei (csv/txt) schreiben lassen.

Wichtig hierbei sind hier die Spalten E und F.
Bsp.weise: in der Zeile 5-23 steht "Bild.  Möchte, dass wenn immer "Bild" auftaucht, das letzte Bild(hierbei Zeile 23) aufgeschrieben und unter dieser "Bild" alle Einträge (Eintrag:...") geschrieben werden

Falls ich nicht so verständlich erklärt habe, schaut einfach die Excel-Datei an.

Tabelle 1: eingangswerte/ So siehst jetzt aus
Die letzten Bild-zeilen habe ich gelb markiert
Tabelle 2: So soll die externe Datei aussehen


Wenn Ihr mir helfen könnt, wäre es wirklich super...


----------



## goto; (24. August 2017)

Guten Abend,

verstehe ich es richtig, dass Du alle "Bilder" und die dazugehörigen Felder darunter in Tabelle 2 schreiben möchtest?


----------



## theva (24. August 2017)

goto; hat gesagt.:


> Guten Abend,
> 
> verstehe ich es richtig, dass Du alle "Bilder" und die dazugehörigen Felder darunter in Tabelle 2 schreiben möchtest?


nein. Ich möchte die Tabelle 1 lesen und in eine externe Datei , wie in Tabelle 2 aussieht", schreiben.
Und beim schreiben nicht alle Bilder schreiben sondern, letztes Bild schreiben dann die Einträge...
Das so oft wiederholen... bis endezeile


----------



## Yaslaw (25. August 2017)

Ist nicht so schwer

Erklärungen im Code

```
Public Sub t405709()
    Const C_SRC_TABLE = "Tabelle1"      'Name der Quelltabelle
    Const C_SRC_ADRESS = "A:G"          'zu kopierender Range
    Const C_TRG_TABLE = "trg"           'Name der Zieltabelle
    Const C_FILTER_COL = 5              'Spalte zum Filtern (E)
    Const C_FILTER_VALUE = "Bild"       'Wert zum filtern
   
   
    Dim srcWs As Worksheet:     Set srcWs = Worksheets(C_SRC_TABLE)
    Dim srcRng As Range:        Set srcRng = srcWs.Range(C_SRC_ADRESS)
    Dim trgWs As Worksheet:     Set trgWs = Worksheets(C_TRG_TABLE)
   
    Dim rowRng As Range
    Dim bildRow As Long
    Dim lastTrgRowNr As Long:   lastTrgRowNr = -1
    Dim blockFlag As Boolean
   
    'Bestehende Daten löschen
    trgWs.UsedRange.Clear
   
    'Zeilen durchiterieren
    For Each rowRng In srcRng.rows
        'Wenn die ganze Zeile leer ist, aufhören
        If srcWs.Application.WorksheetFunction.CountA(rowRng) = 0 Then Exit For
        'Bildfilter prüfen
        If rowRng.Cells(1, C_FILTER_COL).value = C_FILTER_VALUE Then
            blockFlag = False           'Block zurücksetzen
            bildRow = rowRng.row        'Letzte Bild-Zeile merken
        ElseIf bildRow > 1 Then
            'Falls Blockanfang, die letzte Bildzeile ausgeben
            If Not blockFlag Then
                lastTrgRowNr = lastTrgRowNr + 2     'Zielzeile ermitteln (inkl. einer Leerzeile am Anfang)
                'Letzte Bild-Zeile kopieren
                rowRng.Offset(-1).Copy trgWs.Cells(lastTrgRowNr, 1)
                lastTrgRowNr = lastTrgRowNr + 1     'Plus eine Leerzeile
            End If
            blockFlag = True                            'Block beginnen
            lastTrgRowNr = lastTrgRowNr + 1             'Zielzeile ermitteln
            rowRng.Copy trgWs.Cells(lastTrgRowNr, 1)    'Zeile kopieren
        End If
    Next rowRng
    'mitkopierte Formate entfernen
    trgWs.UsedRange.ClearFormats
End Sub
```


----------



## theva (25. August 2017)

Vielen Dank. Super!

Bei mir zeigt er aber hier Fehler an! Run-time Error



Yaslaw hat gesagt.:


> *Dim* trgWs *As* Worksheet:     *Set* trgWs = Worksheets(C_TRG_TABLE)


----------



## Yaslaw (25. August 2017)

Du musst die Konstante für dich anpassen. Bei mir ist es ein Sheet namens trg. Was ist es bei dir?

```
Const C_TRG_TABLE = "trg"           'Name der Zieltabelle
```


----------



## theva (25. August 2017)

Yaslaw hat gesagt.:


> Du musst die Konstante für dich anpassen. Bei mir ist es ein Sheet namens trg. Was ist es bei dir?
> 
> ```
> Const C_TRG_TABLE = "trg"           'Name der Zieltabelle
> ```


Genau Genau... Sorry habe es übersehen. Jetzt klappt es!
Besten Dank! Du hast mir echt geholfen


----------



## theva (28. August 2017)

Das funktioniert einwandfrei!
Wie würdet ihr aus einer externen Datei "ungeöffnet" Werte entnehmen und diese mit oben erwähnten Bild-Zeilen vergleichen?
Ich finde nur Lösungswese, wo ich die externe Datei erst öffnen muss.


----------



## Yaslaw (28. August 2017)

Du kannst nicht aus einer ungeöffneten Datei Werte entnehmen. Mindestens im VBA musst du sie öffnen
Hier als Beispiel, dass die Quelle in einem anderen Workbook ist

```
Dim srcWb As Excel.Workbook:    Set srcWb = Workbooks.Open("C:\MeineQuelle.xlsx")
    Dim srcWs As Worksheet:         Set srcWs = srcWb.Worksheets(C_SRC_TABLE)
    ...
    Set srcWs = Nothing
    srcWb.Close False   'Quelle Schliessen ohne speichern
```


----------



## theva (28. August 2017)

Yaslaw hat gesagt.:


> Du kannst nicht aus einer ungeöffneten Datei Werte entnehmen. Mindestens im VBA musst du sie öffnen
> Hier als Beispiel, dass die Quelle in einem anderen Workbook ist
> 
> ```
> ...



Verstehe. 
Mit der "ExecuteExcel4Macro"-Anweisung funktionierts zwar, allerdings aber nicht so, wie ich es mir vorstelle.

Das Problem beim Öffnen der externen Datei ist, dass der Sortierungsteil, welche du in der Public Sub t405709() erklärt hast, Fehler anzeigt.


----------



## Yaslaw (28. August 2017)

ExecuteExcel4Macro() kenn ich gar nicht.
Und was für ein Sortierungsteil? Was für ein Fehler?


----------



## theva (28. August 2017)

Yaslaw hat gesagt.:


> Ist nicht so schwer
> 
> Erklärungen im Code
> 
> ...



Hier der Bild-Sortierungscode
Und der Fehler ist hier:  Dim srcWs As Worksheet:     Set srcWs = Worksheets(C_SRC_TABLE)

Bevor ich so viel "laber" und das Gespräch ins Nichts bringe, schreibe ich was ich vor habe.
Wie oben zitiert, habe ich die Excel-Datei sortiert. In der sortierten Excel-Datei sind ja: in der ersten Zeile "Bild: Bildnummer"; in der nächsten Zeilen die Einträge aufgelistet.
Jetzt möchte ich aus einer externen Datei. Die Einträge spezialisieren. D.h.:

Veränderbare Werte:
interner Datei: Bild 14 --> Eintrag:Command --> Änderung 0 zu 1

Lokale Werte
externer Datei: Bild 14-->Eintrag:Command---> Lichteinschaltung---->1---->ON
externer Datei: Bild 14-->Eintrag:Command---> Lichteinschaltung---- >0---->OFF

Vergleich der internen mit externen und schreibe eine neue Datei/Tabelle.
Neue Datei sieht dann so aus:
Bild 14--->Lichteinschaltung ---> On

Danke im Voraus


----------



## Yaslaw (28. August 2017)

Das ist kein Sortierungscode. Das ist ein einfaches zuweisen eines Worksheets. Nix mit sortieren.

Und die Fehlermeldung ist?
Des Weiteren. In welcher Datei wird der Code ausgeführt? In der Zieldatei? In der Quelldatei? In einer dritten unabhängigen Datei?


----------



## theva (28. August 2017)

Yaslaw hat gesagt.:


> Das ist kein Sortierungscode. Das ist ein einfaches zuweisen eines Worksheets. Nix mit sortieren.
> 
> Und die Fehlermeldung ist?
> Des Weiteren. In welcher Datei wird der Code ausgeführt? In der Zieldatei? In der Quelldatei? In einer dritten unabhängigen Datei?


- Runtime-Error.
- Code wird in der Zieldatei ausgeführt, wo meine "Rohdaten" sind. In der unabhängingen Datei (externen Datei) befinden sich die Spezifikationen.


----------



## Yaslaw (28. August 2017)

Runtime-Error
Sorry, diese Aussage ist nix Wert. Das ist gleich wie "Es hat ein Fehler". Eine Nummer? Ein Error-Text?


----------



## theva (28. August 2017)

Yaslaw hat gesagt.:


> Runtime-Error
> Sorry, diese Aussage ist nix Wert. Das ist gleich wie "Es hat ein Fehler". Eine Nummer? Ein Error-Text?


Sorry.. 
Nr.9 Index außerhalb des gültigen Bereich


----------



## theva (29. August 2017)

Update: Fehler scheint gelöst zu sein...
Jetzt ist Vergleich-Umsetz-Aufgabe angesagt


----------



## theva (29. August 2017)

Ich weiss, ich frage zu viel. Und vieles davon ist sehr einfach. Ich bin erneut in einer Problematik verwickelt. Wenn ihr mir dieses löst oder Tipp gibt, werde ich euch nicht mehr nerven. Weil ich den Rest ohne Probleme erledigen kann... Also das letzte Mal....

Ich versuche es zu erläutern:

Kommentar #1 dieser Thread: Habe eine Datei hochgeladen und mein Problem geschildert.

Durch Kommentar #4 wurde mein Problem gelöst.


Yaslaw hat gesagt.:


> Ist nicht so schwer
> 
> Erklärungen im Code
> 
> ...



Jetzt ist mein Anliegen folgendes:
Durch oben erwähnten Code wird in meiner Excel-Datei, gezielte Werte aus der Tabelle1 gefiltert und in der Tabelle2 ausgeschrieben.

Ich möchte nun die Werte aus der Quelltabelle durch die Werte der externen Datei( im Anhang) ersetzen.
D.h.:
In der Quelltabelle steht bsp.weise: Spalte F "Bildnummer", Eine Zeile tiefer: Spalte E "Eintrag:Value",  Spalte F "Wertsänderung"

In der externen Tabelle stehen in der Spalte A "Bildnummer", Spalte C "Value" Spalte D"Umdrehung" Spalte F ".."

Also:
1) Vergleiche aus Quell- und extern Tabelle die Bildnr! Wenn sie gleich sind:
2) Vergleiche die Einträge der beiden Tabellen( Der Zellinhalt ist nicht 1 zu 1).

Wenn 1) und 2) stimmen, dann überschreibe die Spalte E aus der Quelltabelle mit Spalte D aus der Externen. Der Rest kann dann stehen bleiben!


----------



## theva (29. August 2017)

Danach kann das Thema gelöscht werden!


----------



## Yaslaw (29. August 2017)

Irgendwie komme ich nicht mit was da wie und wo ersetzt werden soll.
Soll jetzt am Ziel noch irgendwie anhand der skurrilen weiteren Date noch irgendwas gemacht werden?
Sorry, ich weiss auch nicht mehr was mein Code eigentlich macht, da ich bereits so viele Codes auf einzelanfragen geleifert habe und keinen Schimmer habe, wie das zusammenspielen soll.


----------



## theva (29. August 2017)

Yaslaw hat gesagt.:


> Irgendwie komme ich nicht mit was da wie und wo ersetzt werden soll.
> Soll jetzt am Ziel noch irgendwie anhand der skurrilen weiteren Date noch irgendwas gemacht werden?
> Sorry, ich weiss auch nicht mehr was mein Code eigentlich macht, da ich bereits so viele Codes auf einzelanfragen geleifert habe und keinen Schimmer habe, wie das zusammenspielen soll.


Ok, kurz zusammengefasst:
Ich habe zwei Excel-Dateien._ In der ersten befinden sich zwei Tabellen. In der zweiten eine Tabelle.
_
Datei 1(Quelldatei)
Tabelle 1: Roh-Werte
Tabelle 2: Gefiltert und übersicht verschaffene Werte aus der Tabelle 1

Datei 2(Extern)
Tabelle 3: Extern: Info-Datei

Durch dein Code wird in der ersten Excel-Datei eine Quelltabelle(1) gelesen/gefiltert und in eine andere Tabelle(2) geschrieben.
So filtere ich bestimmte Sachen und verschaffe Überblick.

Jetzt soll aus einer externen Excel Datei-Tabelle(3) Werte entnommen werden mit den Werten der Tabelle(2) verglichen werden und falls die Bedingungen stimmen, sollen die Werte der Tabelle(2) mit neuen Werten aus Tabelle(3) überschrieben werden.

Bedingungen sind (Vergleich der Tabelle 2-3): Stimmen die Bild-Nr? Wenn ja, dann stimmen die Einträge? Wenn ja, dann nehme Zellinhalt von .... und ersetzte es in der Tabelle 2 der Quelldatei.


----------



## Yaslaw (29. August 2017)

Also. Vergessen wir mal den Schritt von (1) - >(2). Jetzt geht es um das abändern der Daten in (2) anhand von (3).
Lade doch bitte ein Excelsheet hoch mit Beispieldaten von (2). Und dann erkläre nochmals ganz genau die Logik, wie die Daten von (3) da einflissen. Nicht einfach "dann nimm die Werte" sondern Wenn Spalte Tabelle2.A mit Tabelle3.A übereinstimmt, dann ersetze Tabelle2.X durch Tabelle3.Y.


----------



## theva (29. August 2017)

Ok.
1) Wenn die Spalte "F" aus der Quelldatei/Tabelle2 mit der Spalte "A" der externen Datei/Tabelle3 übereinstimmt, *dann überprüfe:*
2) Wenn die Spalte "E" aus der Quelldatei/Tabelle2 mit der Spalte "C" der externen Datei/ Tabelle3  (Hierbei sind die Zellinhalte nicht 1 zu 1 gleich, aber Befehle sind gleich) *übereinstimmt, dann:*

3) Ersetze Spalte"D" der externen Datei/ Tabelle3 in die Spalte "E" der Quelldatei/Tabelle2. Sowie Spalte "F" der externen Datei/ Tabelle3 in die Spalte "G" in die Quelldatei


----------



## Yaslaw (29. August 2017)

Hm.  1) Das ist nur bei Bild-Zeilen. der Fall.
Dann ist aber für 2) Die Spalte C "Bild" und das findet sich in der externen Tabelle nicht.


----------



## theva (29. August 2017)

Yaslaw hat gesagt.:


> Hm.  1) Das ist nur bei Bild-Zeilen. der Fall.
> Dann ist aber für 2) Die Spalte C "Bild" und das findet sich in der externen Tabelle nicht.


In der Spalte F.Tabelle2 sind ja Bildnr. hinterlegt. sowie Spalte A.Tabelle3. Wenn die übereinstimmen, soll in der Quelldatei sowie in der externen Datei eine Schleife durchgeführt mit einander verglichen werden. Abbruchskriterium= leere Zeile

Und die Übereinstimmungen unter selben Bild.Nr. sollen überschrieben werden.


----------



## theva (29. August 2017)

Ich habe im Excel versucht, darzustellen, wie meine End-datei aussehen soll.


----------



## Yaslaw (29. August 2017)

Jetzt wird's Lustig. Ich löse das mittels Dictionaries und RegExp.
Viel Spass beim Versuch es zu verstehen.....

```
Option Explicit

Public Sub t405709()
    Dim ws As Worksheet:        Set ws = ActiveWorkbook.Worksheets("Tabelle2")
    Dim wbExtern As Workbook:   Set wbExtern = Workbooks.Open("C:\_TMP\ForumSandbox\t405709\extern.xlsx", , True)
    Dim wsExtern As Worksheet:  Set wsExtern = wbExtern.Worksheets("Sheet1")
    
    Dim rowNr As Long
    Dim keyNr As Long
    Dim rx As Object
    Dim eintrag As String
    
    'Resultate aufbauen:
'        <Dictionary>  (
'            [127] => <Dictionary>  (
'                [COMMAND] => <Dictionary>  (
'                    [E] => <String> 'Licht eingeschaltet'
'                    [F] => <String> 'W'
'                )
'                [VALUE] => <Dictionary>  (
'                    [E] => <String> 'Umdrehung'
'                    [F] => <String> 'U/Um'
'                )
'            )
'            [130] => <Dictionary>  (
'                [COMMAND] => <Dictionary>  (
'                    [E] => <String> 'Licht ausgeschaltet'
'                    [F] => <String> 'W'
'                )
'                [VALUE] => <Dictionary>  (
'                    [E] => <String> 'Umdrehung'
'                    [F] => <String> 'U/Um'
'                )
'            )
'        )
    
    Dim keys As Object: Set keys = CreateObject("scripting.Dictionary")
    For rowNr = 1 To wsExtern.Cells.SpecialCells(xlCellTypeLastCell).Row
        If IsNumeric(wsExtern.Cells(rowNr, 1).Value) And Not IsEmpty(wsExtern.Cells(rowNr, 1).Value) Then
            keyNr = wsExtern.Cells(rowNr, 1).Value
            eintrag = UCase(Trim(wsExtern.Cells(rowNr, 3)))
            If Not keys.exists(keyNr) Then keys.add keyNr, CreateObject("scripting.Dictionary")
            If Not keys(keyNr).exists(eintrag) Then
                keys(keyNr).add eintrag, CreateObject("scripting.Dictionary")
                keys(keyNr)(eintrag).add "E", wsExtern.Cells(rowNr, 4).Value
                keys(keyNr)(eintrag).add "F", wsExtern.Cells(rowNr, 6).Value
            End If
        End If
    Next rowNr
    wbExtern.Close False
    D keys

    'RegEx aufbauen um die Eintragszeile zu zerlegen
    Set rx = CreateObject("VBScript.RegExp")
    rx.pattern = "^Eintrag:\s*(.*?)\s*$"

    'Zeilenweise durchgehen
    For rowNr = 1 To ws.Cells.SpecialCells(xlCellTypeLastCell).Row
        If WorksheetFunction.CountA(ws.rows(rowNr)) <> 0 Then
            'Wenn es ein Bild ist, die Nummer merken
            If ws.Cells(rowNr, 5).Value = "Bild" Then keyNr = ws.Cells(rowNr, 6)
            'Bei einem Eintrag den Command extrahieren
            If rx.test(ws.Cells(rowNr, 5).Value) Then
                'Eintrag extrahieren
                eintrag = UCase(rx.execute(ws.Cells(rowNr, 5).Value)(0).subMatches(0))
                'Prüfen ob die BildNr im Index exisitiert
                If keys.exists(keyNr) Then
                    'Prüfen ob zur BildNr der Eintrag im Index existiert
                    If keys(keyNr).exists(eintrag) Then
                        'Werte auslesen und zuweisen
                        ws.Cells(rowNr, 7).Value = keys(keyNr)(eintrag)("E")
                        ws.Cells(rowNr, 8).Value = keys(keyNr)(eintrag)("F")
                    End If
                End If
            End If
        End If
    Next rowNr
    
End Sub
```


----------



## theva (29. August 2017)

Vielen Dank  Ich versuche und melde mich


----------



## theva (29. August 2017)

Yaslaw hat gesagt.:


> D keys


Fehlt hier was, bei mir zeigt er compile error: Sub oder Function soll fehlen


----------



## Yaslaw (29. August 2017)

Ups. Eine Debugzeile. Kannst sie löschen...


----------



## theva (29. August 2017)

So. Auf die schnelle getestet. Die Bedingungen werden erfüllt. Nur nicht überschrieben, sondern in eine andere Zeile geschrieben. 
Aber echt super vielen Dank. Das funktionierts ja...


----------



## Yaslaw (29. August 2017)

Jepp. zu Testzwecken.
Im folgenden Bereich kannst du die Zielspalten anpassen

PS: Ich würde an deiner Stelle noch viele Dinge umbenennen, damit es lesbar wird. Aber da ich nicht wusste wie die Spalten heissen, habe ich so allgemeine Namen verwendet.

```
'Werte auslesen und zuweisen
                       ws.Cells(rowNr, 7).Value = keys(keyNr)(eintrag)("E")
                        ws.Cells(rowNr, 8).Value = keys(keyNr)(eintrag)("F")
```


----------



## theva (29. August 2017)

Du bist der Beste. Echt Sorry für die nervigen Fragen... Jetzt bin ich beschäftigt, alles zu verstehen..


----------



## theva (30. August 2017)

Getestet. Es funktioniert erst mal. Danke
Nur eine kurze Frage zum Thema:

 Set rx = CreateObject("VBScript.RegExp")
    rx.pattern = "^Eintrag:\s*(.*?)\s*$"

Wie kann ich mehrere Einträge pattern lassen und mit Zeichen wie \ oder .
Also anstatt nur "Eintrag:",  " Eintrag: X\y." und "Eintrag: Yx\.wert"

mehrere Einträge habe ich mit & Zeichen versucht, funktioniert nicht und _rx.pattern = "^Eintrag: wert\wert.\s*(.*?)\s*$"_ kannr auch nicht.


----------



## Yaslaw (30. August 2017)

Was ist X und was ist Y?
Schreib einige Beispiele auf.
Text -> Gesuchte Resultet
Eintrag: command -> "command"
Eintrag: command/view -> "command" und "view"
Bis zu wievielen Einträgen können vorkommen?


----------



## theva (30. August 2017)

Es kommen zwei vor. Ist pattern begrenzt?

1)Eintrag: Command\Wert

Das hier funktionierts:
Set rx = CreateObject("VBScript.RegExp")
rx.pattern = "^*Eintrag:Command\*\s*(.*?)\s*$"

2)Eintrag: Command\Status2verweis.Wert

Das hier nicht:
Set rx = CreateObject("VBScript.RegExp")
rx.pattern = "^*Eintrag:Command\Status2verweis.*\s*(.*?)\s*$"

Als Lösungsversuch habe ich das versucht:
Set rx = CreateObject("VBScript.RegExp")
rx.pattern = "^*Eintrag:Command\*\s*(.*?)\s*$" & "^*Eintrag:Command\Status2verweis.*\s*(.*?)\s*$"


----------



## Yaslaw (30. August 2017)

Die RegEx Patterns stelle ich besser selber zusammen.
Was davon soll jeweils extrahiert werden?

1)Eintrag: Command\Wert
Brauchst du da "Command"? Oder "Wert"? oder "Command.Wert"? Oder "Eintrag"?

2)Eintrag: Command\Status2verweis.Wert
Gleiche Frage

Und ist "Wert" der String  "Wert" oder steht dort irgend ein Wert.
Also
"Eintrag: Command\Wert" oder "Eintrag: Command\098876"


----------



## theva (30. August 2017)

Yaslaw hat gesagt.:


> Die RegEx Patterns stelle ich besser selber zusammen.
> Was davon soll jeweils extrahiert werden?
> 
> 1)Eintrag: Command\Wert
> ...



In möchte in beiden Fällen nur den Wert haben.


----------



## Yaslaw (30. August 2017)

Und ist es der Text "Wert" oder steht dort irgenwas?

Ansonsten reicht dieser Pattern: https://regex101.com/r/0FnMt1/1

```
\\(?:Status2verweis\.)?(\S+)
```


----------



## theva (30. August 2017)

Yaslaw hat gesagt.:


> Und ist es der Text "Wert" oder steht dort irgenwas?
> 
> Ansonsten reicht dieser Pattern: https://regex101.com/r/0FnMt1/1
> 
> ...


Der Wert besteht aus Buchstaben, Unterstrich und Zahlen. _PC_2013_2017_


----------



## theva (30. August 2017)

Yaslaw hat gesagt.:


> Und ist es der Text "Wert" oder steht dort irgenwas?
> 
> Ansonsten reicht dieser Pattern: https://regex101.com/r/0FnMt1/1
> 
> ...


Der Wert besteht aus Buchstaben, Unterstrich und Zahlen. _PC_2013_2017_
Das ist immer gleich aufgebaut. 
Nur das zu patternder Teil ist zunächst 1) "Eintrag: Command*\*Status2verweis.Wert" und danach wieder nur 2) "Eintrag: Command\Wert"

Das Problem liegt beim "\" der 1)


----------



## Yaslaw (30. August 2017)

Jepp. Dan geht der obere Pattern. Siehe auch den Test und die Beschreibung auf https://regex101.com/r/0FnMt1/1 (Achtung, dort ist Global und Multiline eingestellt. Das ist NUR damit man mehre Tests gleichzeitig machen kann. Dass muss bei dir nicht aktiviert werden)


----------



## theva (30. August 2017)

Erledigt! Danke


----------



## Yaslaw (30. August 2017)

Vorher was es noch Status2verweis jetzt Verweis. Sorry. Du kommst jedesmal mit neuen Mustern und Texten obwohl ich dich danach gefragt habe.
Ja, der Pattern geht damit natürlich nicht. Die Patterns waren alle Massgeschneidert
Wir können auch noch 20 verschiedene Pattern generieren. Kein Problem. Das Chaos wird unendlich.


```
^Eintrag\: (?:Command\\|Value\\Verweis\.)?(.+)$
```


----------



## theva (30. August 2017)

Yaslaw hat gesagt.:


> Vorher was es noch Status2verweis jetzt Verweis. Sorry. Du kommst jedesmal mit neuen Mustern und Texten obwohl ich dich danach gefragt habe.
> Ja, der Pattern geht damit natürlich nicht. Die Patterns waren alle Massgeschneidert
> Wir können auch noch 20 verschiedene Pattern generieren. Kein Problem. Das Chaos wird unendlich.
> 
> ...


Nein Nein Sorry. Das Problem lag ganz wo anders. Habe auch sofort mein Post gelöscht. War bisschen voreiligt


----------



## Yaslaw (30. August 2017)

Anosnten gehen natürlich auch die folgenden Pattern

```
//Das Ende des Strings ab \ oder .
([^\.\\]+)$

//Das,Ende des String. Bestehend aus Buchstaben, Unterstrich und Zahlen. Wobei hier keine Sonderzeichen dabei sind(äöü)
(\w+)$
```


----------



## theva (30. August 2017)

Yaslaw hat gesagt.:


> Anosnten gehen natürlich auch die folgenden Pattern
> 
> ```
> //Das Ende des Strings ab \ oder .
> ...


Sorry erst jetzt gesehen. Danke dir! Kannst du mir vlt. paar Skripte vorschlagen, wo ich das Pattern anlernen kann. Ich werde bestimmt sehr oft extrahieren müssen.


----------



## Yaslaw (30. August 2017)

Einerseits natürlich bei Microsoft: https://msdn.microsoft.com/en-us/library/1400241x(v=vs.84).aspx
Und dann als Sandbox: https://regex101.com
Vorosicht, regex101 hat keinen Dialekt für Access. Wenn man mit pcre testet einfach immer sicher sein, dass der Befehl auf der Microsoftseite aufgelistet ist.
Bei regex101 kannst du auch ein Script hineinkopieren. Rechts oben wird dir dann erläutert was die einzelnen Patterns bedeuten.

Viel Spass mit einer sehr mächtigen Sprache: Reguläre Ausdrücke (RegEx oder RegExp abgekürzt)


----------

