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 |