| |
Visual-Basic EinsteigerVerstä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 | |
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. | |
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 = "" | |
Re: Verständnisproblem zur "Replace"-Funktion | | | Autor: Hollie | Datum: 24.01.24 08:20 |
| Hm, ?.
Danke. | |
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. | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere Infos
|