VBA: Führende Nullen pp. in einer Variable löschen

Hi,
in einer Variablen mit dem Inhalt "000467/2009/Bo/2009-10-05 " sollen die drei (oder 4 oder irgendeine Anzahl) führender Nullen und sämtliche Zeichen beginnend mit dem „/“ vor der 2009 bis zum Leerzeichen am Ende gelöscht werden. Wie könnte der Code dafür aussehen?
Danke und Grüße
Wilhelm

Hi,

auch hi,

in einer Variablen mit dem Inhalt "000467/2009/Bo/2009-10-05 "
sollen die drei (oder 4 oder irgendeine Anzahl) führender
Nullen und sämtliche Zeichen beginnend mit dem „/“ vor der
2009

ich gehe jetzt mal davon aus, dass du die erste 2009 meinst,

bis zum Leerzeichen am Ende

ich gehe davon aus, du meinst einschließlich des Leerzeichens

gelöscht werden. Wie könnte
der Code dafür aussehen?

z.B. so:

Option Explicit

Dim str\_a As String
Dim int\_i As Integer

str\_a = "000467/2009/Bo/2009-10-05 "
int\_i = 1
While Mid(str\_a, int\_i, 1) = "0"
 int\_i = int\_i + 1
Wend
str\_a = Right(str\_a, Len(str\_a) - int\_i + 1)
int\_i = InStr(str\_a, "/2009")
str\_a = Left(str\_a, int\_i - 1)

Danke und Grüße

Bitte und Grüße

Wilhelm

Andreas

Hallo Andreas,
zunächst ein herzliches Dankeschön, verbunden mit einer Frage: Mit welchem Codeschnipsel bekomme ich das Ergebnis der Variablen nach der Umwandlung wieder an die Position einer Flächen-Textmarke „UR“?
Danke und Gruß
Wilhelm

in einer Variablen mit dem Inhalt "000467/2009/Bo/2009-10-05 "
sollen die drei (oder 4 oder irgendeine Anzahl) führender
Nullen und sämtliche Zeichen beginnend mit dem „/“ vor der
2009 bis zum Leerzeichen am Ende gelöscht werden. Wie könnte
der Code dafür aussehen?

Hallo Wilhelm,

wenn du von Word-Vba sprichst so gib das bitte auch an, genau wie die Version.

Ich kenne mich in Word nicht so aus, ist eine Flächen-Textmarke etwas anderes als eine Textmarke?

Sub tt()
Dim Txt As String, strZahl() As String, strVar As String
Txt = "000467/2009/Bo/2009-10-05 "
strZahl = Split(Txt, "/")
strVar = CStr(Int(strZahl(0)))
MsgBox strVar
End Sub

Gruß
Reinhard

Hallo Wilhelm,

mir geht’s wie Reinhard: Mit Word-VBA kann ich nicht. Excel ist eher mein Ding. Was eine „Flächen-Textmarke „UR““ ist, keine Ahnung.
Vielleicht gibt’s hier ja noch einen Word-VBA Experten.

Sorry und Gruß,
Andreas

Hallo,
für mein Problem habe ich inzwischen eine Lösung gefunden. Was ich Flächentextmarke nenne, heißt korrekt wohl Textmarkenfeld oder geschlossene Textmarke. Aus der Hilfe:
„Als nächstes markieren Sie nun einen kurzen, Text z.B. ein Wort im Dokument. Wählen Sie dann wieder den Dialog Einfügen - Textmarke… und vergeben Sie der Marke einen Namen. Das Resultat ist eine geschlossene Textmarke und wird wie folgt angezeigt: []. Sie haben letztlich einen Bereich definiert. In der Word-Hilfe heisst so ein Gebilde übrigens Textmarkenfeld.“
Liebe Grüße
Wilhelm

Hallo Wilhelm,

für mein Problem habe ich inzwischen eine Lösung gefunden.

und wie sieht die aus? Das Konzept von w-w-w ist Wissensaustausch.

Nimm mal ein neues Dokument und schreib da paar Zeilen rein.
In einer schreibst du vorne
000467/2009/Bo/2009-10-05
rein, markierst das und dann Einfügen—Textmarke, dafür den namen „UR“ vergeben.

Dann dieses makro:

Sub tttt()
Dim Txt As String, strZahl() As String
Txt = ActiveDocument.Bookmarks(„UR“).Range
strZahl = Split(Txt, „/“)
ActiveDocument.Bookmarks(„UR“).Range = CStr(Int(strZahl(0)))
End Sub

Nun steht dort 467.
Wie man dafür nun neu die Textmarke „UR“ vergibt weiß ich nicht, wahrscheinlich irgednwieso:

With ActiveDocument.Bookmarks
 .Add Range:=Selection.Range, Name:="UR"
 .DefaultSorting = wdSortByName
 .ShowHidden = False
End With

Mein Problem dabei ist „Selection“. Wie selektiere ich 467, besonders wenn es mehrmals im Text auftritt.

Gruß
Reinhard

1 Like

Hallo Reinhard,
meine Lösung war nicht veröffentlichungswert, ich habe einfach in der TM die Zeichen rechts vom / bis incl. Leerzeichen gelöscht und den Rest mit der Trim-Funktion formatiert.

Die Split-Funktion, die ich nicht kannte, ist ja ein starkes Ding. Erst im Überwachungsfenster habe ich erkannt, was läuft. Nur: Wenn man den Array-Schalter von 0 auf 1 setzt, erzeugt sie die Jahreszahl, bei 2 zeigt sich eine Fehlermeldung, obwohl das Array doch 3 Elemente hat?

Die TM wiederherstellten kann man mit einer Erweiterung Deiner Prozedur:
Sub ttt()
Dim Txt As String, strZahl() As String
Dim TMName, TMRange As Range

Txt = ActiveDocument.Bookmarks(„UR“).Range
strZahl = Split(Txt, „/“)

TMName = „UR“
Set TMRange = ActiveDocument.Bookmarks(TMName).Range
TMRange.Text = CStr(Int(strZahl(0)))
ActiveDocument.Bookmarks.Add Name:=TMName, Range:=TMRange
End Sub

Erneut Dank u. Gruß
Wilhelm

Hallo Willhelm,

meine Lösung war nicht veröffentlichungswert, ich habe einfach
in der TM die Zeichen rechts vom / bis incl. Leerzeichen
gelöscht und den Rest mit der Trim-Funktion formatiert.

wenn jemand am gleichen Problem hängt und nicht weiterkommt, der nimmt doch gerne jedwede Lösung ob sie nun veröffentlichungswert ist oder nicht…

Die Split-Funktion, die ich nicht kannte, ist ja ein starkes
Ding. Erst im Überwachungsfenster habe ich erkannt, was läuft.
Nur: Wenn man den Array-Schalter von 0 auf 1 setzt, erzeugt
sie die Jahreszahl, bei 2 zeigt sich eine Fehlermeldung,
obwohl das Array doch 3 Elemente hat?

Das Array hat 4 Elemente, von 0 bis 3. Die kann man auch problemlos auslesen, siehe nachstehenden Code.
Kommt ein Fehler so hat das nix mit der 2 selbst zu tun sondern mit dem Inhalt des 3ten Elements , also Index 2.
Der Fehler kommt wenn du versuchst dieses Element („Bo“) in eine Zahl umzuwandeln.n Und das macht ja INT().

Ggfs. mit IF Isnumeric() vorher abprüfen ob das Element als zahl umgewndelt werden kann.

Sub tttt()
Dim Txt As String, strZahl() As String, N As Byte, Anz As Byte
Txt = "000467/2009/Bo/2009-10-05"
strZahl = Split(Txt, "/")
For N = 0 To UBound(strZahl)
 Anz = Anz + 1
 MsgBox strZahl(N)
Next N
MsgBox Anz
End Sub

Gruß
Reinhard