vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Verständnisproblem zur "Replace"-Funktion 
Autor: Hollie
Datum: 23.01.24 08:22

Hallo und guten Tag in die Runde.

Ich habe ein Verständnisproblem zur "Replace"-Funktion, speziell zu den Parametern
"starten" und "Anzahl".
Die Hilfe sagt
"Replace(Ausdruck, suchen, ersetzendurch[, starten[, Anzahl[, vergleichen]]])"

In meiner Textbox trage ich die Zeichenfolge "1717" ein und wähle die zweite "17" aus,
um diese durch "" (nichts) zu ersetzen, sodass die erste "17" erhalten bleiben soll.
Mit "Me.Text1.Text = Replace(STRG, TMP0, "", A1, 1)" will ich das ausführen, aber Fehler.
["A1 = 3" nach meinem Verständnis ab Position 3 des Strings "1717" "starten"]
["1" nach meinem Verständnis String nur einmal durchsuchen "Anzahl"]
Leider verschwindet alles, die Textbox wird geleert.
(Ebenso fehlerhaftes Ergebnis, wenn ich "71" im String "1717" auswähle.)
Was mache oder verstehe ich falsch ???

(Habe das Projekt mal minimiert beigefügt; ggf. zum Nachvollziehen den Programmcode
in ein neues Projekt einfügen und ausprobieren.
HINWEIS: in meinem Originalprojekt ist das normale Kontextmenü von "Text1" unterdrückt,
hier im minimalisierten Testprogramm nicht.)

Vielen Dank für Eure Hilfe, Grüße HolgeN
 
 
Public WithEvents Text1 As TextBox
Public WithEvents lblSTB As Label
Public WithEvents Button As CommandButton
Private STRG$, TMP0$, A1%, A2%
 
Private Sub Form_Load()
    Me.Width = 4900: Me.Height = 2600: Me.FontName = "Arial"
    Set Text1 = Me.Controls.Add("VB.TextBox", "Text1"): Me.Text1.TabStop = False
    With Text1
        .Width = 855: .Height = 465: .FontName = "Arial": .FontSize = 16: .Left _
          = 480: .Top = 600: .MaxLength = 4: .TabStop = True: .Visible = True
    End With
    Set Button = Me.Controls.Add("VB.CommandButton", "Button"): _
      Me.Button.TabStop = False
    With Button
        .Width = 2000: .Height = 525: .FontName = "Arial": .FontSize = 10: _
          .Left = 2040: .Top = 600: .Caption = "Ausschneiden": .TabStop = True: _
          .Visible = True
    End With
    Set lblSTB = Me.Controls.Add("VB.Label", "lblSTB")
    With lblSTB
        .Height = 315: .Width = Me.Width: .Top = 1680: .FontName = "Arial": _
          .FontSize = 8: .BorderStyle = 1: .Visible = True
    End With
End Sub
 
Private Sub Button_Click()
 
    Me.lblSTB.Caption = ""
 
    A1 = Me.Text1.SelStart + 1 ' "+ 1", sonst LfzF 5
    A2 = Me.Text1.SelLength    'Länge des markierten Textes
    If A2 = 0 Then Me.lblSTB.Caption = " nichts ausgewählt": Exit Sub
 
    STRG = Me.Text1.Text
    TMP0 = Mid(Me.Text1.Text, A1, A2)
    Me.lblSTB.Caption = " Text """ & STRG & """, Auswahl """ & TMP0 & """ " & _
      ", suchen in Text1 ab Pos. """ & A1 & """"
 
    'F1: Replace(Ausdruck, suchen, ersetzendurch[, starten[, Anzahl[, 
    ' vergleichen]]])
    'Hier also würde ich denken, dass "A1" die Startposition für das Suchen 
    ' angibt (ab 3. Zeichen in "Text1")
    'und das Argument "1" das Ersetzen auf "nur einmal" beschränkt. Aber geht 
    ' nicht:
 
    Me.Text1.Text = Replace(STRG, TMP0, "", A1, 1)
 
'Wie also kann man so ersetzen, dass
'- egal, wie viele Zeichen an irgendeiner Position ausgewählt sind -
'das Ergebnis korrekt ist ???
'(Über das normale Kontextmenü der Textbox funktioniert es korrekt.)
 
''Dieser "Umweg" würde funktionieren:
''    Dim X%, TMP2$
''    For X = 1 To Len(Me.Text1.Text)
''        If X < A1 Or X > (A1 + A2) - 1 Then TMP2 = TMP2 & Mid(STRG, X, 1)
''    Next X
''    Me.Text1.Text = TMP2: TMP2 = ""
 
    A1 = 0: A2 = 0: STRG = "": TMP0 = ""
    If Len(Me.Text1.Text) > 0 Then Me.Text1.SelStart = Len(Me.Text1.Text): _
      Me.Text1.SetFocus
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verständnisproblem zur "Replace"-Funktion 
Autor: Manfred X
Datum: 23.01.24 09:00

Hallo!

Es wird im übergebenen String ggf. ab dem Parameter "start" gesucht.
Zurückgegeben wird der modifizierte String AB der Position "start".
Die Zeichenfolge die davor steht, wird in der Rückgabe abgeschnitten.

Dokumentation:

Die Replace-Funktion gibt eine Zeichenfolge zurück, die eine Teilzeichenfolge eines
Zeichenfolgenausdrucks, beginnend an der Startposition (standardmäßig 1), ist,
bei der eine angegebene Teilzeichenfolge eine bestimmte Anzahl von Malen durch
eine andere Teilzeichenfolge ersetzt wurde.

optionaler Parameter 'start':
Startposition für die Teilzeichenfolge von expression,
nach der gesucht wird und die zurückgegeben wird.


Beitrag wurde zuletzt am 23.01.24 um 09:10:14 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verständnisproblem zur "Replace"-Funktion 
Autor: Kuno60
Datum: 23.01.24 16:17

Hallo,

Ja Replace verhält sich anders als erwartet. Sowas hat mich an VB6 schon immer gestört.

Wenn es dir nur darum geht, den ausgewählten Text zu löschen, das geht auch einfacher:
1. Durch drücken der "Entf"-Taste
2. Per Code durch: Me.Text1.SelText = ""
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verständnisproblem zur "Replace"-Funktion 
Autor: Hollie
Datum: 24.01.24 08:20

Hm, ?.
Danke.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Verständnisproblem zur "Replace"-Funktion 
Autor: Hollie
Datum: 24.01.24 08:21

Supie, so einfach, vielen Dank.
Die MS-Hilfe bietet häufig verständliche Erklärungen, nur manchmal frage ich mich schon, ob sie diese auch mal einem "DAU" vorgelegt haben.
Aber eben gut, dass es diese Foren (auch das VB-Archiv) gibt, da wird manches Rätsel gelöst oder anderweitig "umschifft".
Nochmals ein dickes Danke.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel