Text rückwärts

Hallo an alle

wollte wissen ob ich, wenn ich einen text in word eingebe was einstellen kann, dass der rückwärts ( buchstabenweise ) geschrieben wird??
WEnn ich ein programm benörtige bitte helft mir ist sseeehr wichtig

mfg
manu

wollte wissen ob ich, wenn ich einen text in word eingebe was
einstellen kann, dass der rückwärts ( buchstabenweise )
geschrieben wird??
WEnn ich ein programm benörtige bitte helft mir ist sseeehr
wichtig

Hallo manu,

mit Vba geht das so.

Alt+F11, lnks sieht du das „pojekt“ deines Dokumentes, erkennbar am Dokumentnamen. Wenn drunter Pluszeichen sind so fächere die auf wie im Explorer.

Die „Untergruppen“ sind Module des Dokuments. Nachstehend ist Code den du auf verschiedene Module aufteolen/reinschreiben mußt. Es steht dabei in welches Modul.

Gehe nun oben auf „Einfügen“ und füge ein Modul, danach eine Userform ein.

Links siehst du dann dadurch neu „Modul1“ und Userform1".
Im VB-Editor wo du grade bist wechselt man von Modul zu Modul durch DOPPELklick auf den Modulnamen.

Wenn du auf Userform1 gehst siehst du die Userform, links davon ist eine Werkzeugsammlung, gehe mit der Maus langsam über die Symbole, klicke auf Textfeld und Schaltfläche und „ziehe“ die jeweils in der Userform in gewünschter Größe „auf“.
Um den Code für die Userform1 eingeben zu können doppelklicke auf sie.

Kopiere nun nacheinander in die Module den jeweiligen Code der da rein soll.

Ändern/anpassen brauchst du nur ggfs. in dieser Codezeile:
Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeyI), \_
 KeyCategory:=wdKeyCategoryCommand, Command:="Rueckwaerts"

das wdKeyI. Es bedeutet daß du in Word dieses Makro was rückwärts schreibst, startest durch Strg+i, wenn dir das i nicht passt nimm einen anderen Buchstaben.

Wenn allse fertig ist, beendest du den VB-Editor oben rechts durch das Schließkreuz.

Dann das Dokument schließen mit Übernahme der Änderungen.
Neu öffnen. Ab nun kannst du mit Strg+i „Rückwärts“ schreiben.
D.h. durch Strg+i kommt ein Fenster wo du in das Textfeld Text eingeben kannst, durch Klick auf die Schaltfläche „Scheiben“ wird der Text rückwärts an die aktuelle Position im Dokument geschrieben.

Nachstehend die Codes.

Gruß
Reinhard

**In das Modul "ThisDocument"**

Option Explicit
'
Private Sub Document\_Open()
Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeyI), \_
 KeyCategory:=wdKeyCategoryCommand, Command:="Rueckwaerts"
End Sub

**In das Modul "Userform1"**

Option Explicit
'
Private Sub CommandButton1\_Click()
If TextBox1 "" Then
 Selection.TypeText Text:=StrReverse(TextBox1)
 Unload UserForm1
End If
End Sub
'
Private Sub UserForm\_Initialize()
UserForm1.Caption = "Rückwärts"
CommandButton1.Caption = "Schreiben"
TextBox1.SetFocus
End Sub

**In das Modul "Modul1"**

Option Explicit
'
Sub Rueckwaerts()
UserForm1.Show
End Sub

Codeänderung
Hallo manu,

Nimm mal diesen Code für das Modul „ThisDocument“

Option Explicit
'
Private Sub Document\_Open()
Application.KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeyI), \_
 KeyCategory:=wdKeyCategoryCommand, Command:="Rueckwaerts"
End Sub
'
Private Sub Document\_Close()
Application.KeyBindings.Key(KeyCode:=BuildKeyCode(wdKeyControl, wdKeyI)).Clear
End Sub

Gruß
Reinhard

Hallo

wollte wissen ob ich, wenn ich einen text in word eingebe was
einstellen kann, dass der rückwärts ( buchstabenweise )
geschrieben wird??

Da es bestimmte Länder gibt, in denen von rechts nach links geschrieben wird, und Word auch dort funktionieren soll, ist so ein Verhalten bereits in Word integriert, sofern man das zugehörige AddIn installiert und aktiviert hat.

Soweit ich weiß, musst du deinem Worddokument dann eigentlich nur noch sagen, dass der darin enthaltene Text z.B. Arabisch ist (Extras Sprache), oder du benutzt die für dieses AddIn zusätzlich zur Verfügung stehenden Absatzformate Rechts-nach-Links und Links-nach-Rechts. Das sind, soweit ich mich erinnere, zusätzliche Schalter, die mit dem AddIn installiert werden.

Funktioniert an sich auch in älteren Wordversionen, siehe z.B. diese Anleitung für Word2003:

http://www.microsoft.com/downloads/details.aspx?disp…
und
http://office.microsoft.com/de-ch/word/HP05258567103…

Gruß
A

Hallo Reinhard,

kuckst Du vielleicht auch hier:
http://rtsoftwaredevelopment.de/html/examples/srvxmp…
Das ist sehr interessant, denn der macht’s mit einem rekursiven Aufruf.

Vielleicht will der Anfrager nämlich nur bestimmte Wörter umdrehen.

Im übrigen klingt mir die Anfrage ganz nach „Hausaufgaben“ von angehenden EDV-Kaufmann-Berufsschülern oder Gymnasiasten mit Wahlfach Informatik. Wer sollte das denn sonst noch wollen? Kuckst Du Dir noch den Namen an: ManuelWilhelm95. Hat er nicht vielleicht ganz stolz sein Geburtsjahr aufgegeben? Dann würden wir die Hausaufgaben eines Fünfzehnjährigen machen - worauf die schlampige Schreibweise sowie sowas wie „WEnn ich ein programm benörtige bitte helft mir ist sseeehr wichtig“ hindeuten.

Gruß

Markus

hallo Markus,

kuckst Du vielleicht auch hier:
http://rtsoftwaredevelopment.de/html/examples/srvxmp…
Das ist sehr interessant, denn der macht’s mit einem
rekursiven Aufruf.

wäre brauchbar für XL97, da gabs noch kein StrReverse.
Ansonsten, Thomas ist schon sehr fit, ich lese ihn ja in Foren und kenne seine Homepage.

Vielleicht will der Anfrager nämlich nur bestimmte Wörter
umdrehen.

Richtig, so genau hat er nicht gesagt was er eigentlich vorhat,

Im übrigen klingt mir die Anfrage ganz nach „Hausaufgaben“ von
angehenden EDV-Kaufmann-Berufsschülern oder Gymnasiasten mit
Wahlfach Informatik.

Wahrscheinlich hast du Recht.
Aber ich sehe das nicht so eng wie w-w-w.
Für mich ist es dasselbe ob ein Schüler hier „DRINGEND“ :smile: anfragt weil er am nächsten Morgen was abliefern muß oder eine Klausur schreibt.
Oder jmd. das Gleiche anfragt weil er bis morgen etwas gellöst haben muß weil sein Chef das morgen früh Kunden präsentieren will.

Kuckst Du Dir noch den Namen an: ManuelWilhelm95. Hat er nicht
vielleicht ganz stolz sein Geburtsjahr aufgegeben? Dann würden
wir die Hausaufgaben eines Fünfzehnjährigen machen - worauf
die schlampige Schreibweise sowie sowas wie „WEnn ich ein
programm benörtige bitte helft mir ist sseeehr wichtig“
hindeuten.

Genau weiß man ja nie was, man sieht ja nur Benutzernamen und seinen Text.
Ich denke aber ähnlich wie du und sehe das auch so.

Sehr möglicherweise hätte ich im Excelbrett erst mal etwas zurückgefragt, Versionsnummer oder ws auch immer.
Durch Eintagsfliegen, also Leute die am gleichen Tag fragen an dem sie sich hier einloggen habe ich mir angewöhnen müssen nachzufragen.
Leider kommt bei geschätzten 50% keine Reaktion.

Ist für mich okay, habe ich nicht für die Tonne gearbeitet.

Jetzt hier war es anders, in Word selbst kenne ich mich grad so aus daß ich einen Brief schreiben kann.
Bin da auch nicht interessiert mich da einzuarbeiten. Aber Word-Vba interessiert mich schon.

Hauptsächlich dies war mein Anlaß mich daran zu versuchen. Und da es ja dadurch mein Interesse wurde interessiert es mich nicht die Bohne ob der Anfrager je meine Antwort liest oder nicht.

Und zur Hausaufgabe, Lehrer kennen schon ihre Pappenheimer und sehen auf den ersten Blick, zumindest bei einigen, ob der Code von diesen Schülern stammt oder Fremdcode ist.

Gruß
Reinhard

Hallo Reinhard,

wäre brauchbar für XL97, da gabs noch kein StrReverse.

Auch in Word97-VBA gibt’s kein StrReverse, kein Join, kein Split. (Ich bleibe nämlich immer noch bei Word97, weil sonst meine Texte ein Eigenleben entwickeln, das nicht ganz positiv nach außen wirkt.)

Im übrigen klingt mir die Anfrage ganz nach „Hausaufgaben“ von angehenden EDV-Kaufmann-Berufsschülern oder Gymnasiasten mit Wahlfach Informatik.

Wahrscheinlich hast du Recht. Aber ich sehe das nicht so eng wie w-w-w. Für mich ist es dasselbe ob ein Schüler hier „DRINGEND“ :smile: anfragt weil er am nächsten Morgen was abliefern muß oder eine Klausur schreibt.
Oder jmd. das Gleiche anfragt weil er bis morgen etwas gellöst haben muß weil sein Chef das morgen früh Kunden präsentieren will.

Für mich ist da ein Unterschied. Und zwar ein gewaltiger. In einer Firma arbeiten wir zusammen, damit es der Firma gut geht, so daß unsere Arbeitsplätze erhalten bleiben.
In einer Schule arbeiten wir nur zusammen, wenn der Lehrer Gruppenarbeit aufgibt. Wenn er Hausaufgaben aufgibt, dann will er die Leistungen des einzelnen prüfen. Und nichts anderes.
Deshalb helfe ich allen Arbeitskollegen gerne, aber Schülern nicht. Dazu ist ihr Lehrer da.

…die schlampige Schreibweise sowie sowas wie „WEnn ich ein programm benörtige bitte helft mir ist sseeehr wichtig“ hindeuten.

Genau weiß man ja nie was, man sieht ja nur Benutzernamen und seinen Text. Ich denke aber ähnlich wie du und sehe das auch so.

Das ist für mich auch eine Frage der Höflichkeit. Bevor ich in ein Brett hineinbrülle (jaja, ich weiß, er hat ja keine Versalien benutzt, aber fast…), gucke ich doch mal, wie da der Ton ist.

…Lehrer kennen schon ihre Pappenheimer und sehen auf den ersten Blick, zumindest bei einigen, ob der Code von diesen Schülern stammt oder Fremdcode ist.

Damit haben doch wir nix zu tun, oder?

Einen String umzudrehen - wer das auf der Arbeit machen muß, der kann sich meist auch selbst helfen. Das Problem selbst ist für das Forum uninteressant. Ich finde halt nur, daß man gelegentlich ein Auge darauf werfen muß, daß das Forum interessant bleibt für die, die es regelmäßig lesen.

Leider kommt bei geschätzten 50% keine Reaktion.

Eben.

Ist für mich okay, habe ich nicht für die Tonne gearbeitet.

Aber für die Tonne den Hausaufgaben-Hilferuf gelesen.

So, jetzt aber Schluß für heute. Ich habe den gegebenen Anlaß genutzt, meine Einstellung dezidierter kundzutun. No action required.
Gruß
Markus

wäre brauchbar für XL97, da gabs noch kein StrReverse.

Auch in Word97-VBA gibt’s kein StrReverse, kein Join, kein
Split. (Ich bleibe nämlich immer noch bei Word97, weil sonst
meine Texte ein Eigenleben entwickeln, das nicht ganz positiv
nach außen wirkt.)

Hallo Markus,

ja, Office97 beruht auf VB5.0 da gabs manches nicht was es in VB6.0 gibt worauf höhere Officeversionen beruhen. Bis hin zu Version 6.5, die ich nicht einsortieren kann weils die in VB nicht gibt.

Egal, ich habe Split nachgebaut in Vba für XL97 bzw. VB5.0, wenn du den Code brauchst, sag Bescheid, ist zwar für Excel aber das dürfte Wurschte sein.
Genauso der Code für InstrRev.

Gruß
Reinhard

Hallo Reinhard,

Egal, ich habe Split nachgebaut in Vba für XL97 bzw. VB5.0, wenn du den Code brauchst, sag Bescheid, ist zwar für Excel aber das dürfte Wurschte sein. Genauso der Code für InstrRev.

Wenn Du Zeit hast, schick’ ihn doch mal rüber. Zwar brauche ich ihn derzeit nicht, aber mich würde interessieren, wie Du das gemacht hast.
Ich selbst bin kein gelernter Programmierer (sondern reiner Autodidakt), und finde es immer wieder faszinierend, wie Programmierer sich in Abläufe eindenken können. Wegen dieser Faszination habe ich Dir auch den Link zu Risi geschickt.
Wir könnten jetzt auch eine Diskussion vom Zaun brechen, was denn speicherintensiver ist: der rekursive Aufruf (Risi) oder das Iterieren durch Schleife bzw. Array (wie ich das gelöst hätte).

Aber egal. Hauptsache, es macht noch Spaß.

Gruß

Markus

Office 97 / VB5.0 Ersatz für Split und InstrRev
Hallo Markus,

Wenn Du Zeit hast, schick’ ihn doch mal rüber. Zwar brauche
ich ihn derzeit nicht,

vielleicht willst du mal Code zum Verteilen basteln der in allen Versionen laufen muß.
Ich sehe grad, InstrREv ist gar nicht mein Code, aber ist egal.

Und, Excel habe ich mir auch selbst beigebracht bzw. bin noch dabei.
Der Makrorekorder ist eine große Einstiegshilfe.
Deshalb kriege ich gelegentlich auch Word-Vba Code hin und fluche bei Outlook o.ä. :smile:

Function Split(ByVal strText As String, Optional Trenner As String = " ") As Variant
' Code by Reinhard 2007
Dim Anz As Long
If strText = "" Then Exit Function ' Reaktion wie im Original
#If VBA6 0 Then ' =XL97, VBA6 gibt es ab XL2000, vorher war es VBA5 bei XL97
 Split = VBA.Split(strText, Trenner)
 Exit Function
#End If
If strText = "" Then Exit Function ' Reaktion wie im Original
If Trenner = "" Then Trenner = " " ' Ersatz wie im Original
strText = strText & Trenner
ReDim C(0)
While InStr(strText, Trenner)
 ReDim Preserve C(Anz)
 C(Anz) = Left(strText, InStr(strText, Trenner) - 1)
 strText = Mid(strText, InStr(strText, Trenner) + 1)
 Anz = Anz + 1
Wend
Split = C
End Function

**********************************************************************

Private Declare Sub PokeLng Lib "kernel32" Alias "RtlMoveMemory" ( \_
 ByVal Addr As Long, Value As Long, Optional ByVal Bytes As Long = 4)
'
'VB5 bietet von Haus aus keine Rückwärts-Suche innerhalb von Strings an.
'Die folgende Routine implementiert daher die seit VB6 bekannte Funktion
'und ist (dank binärer Suche) oft sogar schneller:

Public Function InStrRev(ByRef sCheck As String, ByRef sMatch As String, \_
Optional ByVal Start As Long, Optional ByVal Compare = vbBinaryCompare) As Long
'
'( "As VbCompareMethod" wird nicht akzeptiert, fehlt da ein Verweis??? )
'
'Optional ByVal Compare As VbCompareMethod = vbBinaryCompare) As Long
'© Jost Schwider, 29.10.2000-17.12.2000 - http://vb-tec.de/instrrev.htm
'
Dim Stopp As Long, Index As Long, Pivot As Long, Length As Long
Dim LengthPtr As Long, MatchLen As Long
#If VBA6 0 Then ' =XL97, VBA6 gibt es ab XL2000, vorher war es VBA5 bei XL97
 InStrRev = VBA.InStrRev(sCheck, sMatch)
 Exit Function
#End If
If Compare = vbBinaryCompare Then
 MatchLen = LenB(sMatch) - 1
 If MatchLen \> -1 Then
 'Linke Grenze bestimmen:
 Stopp = InStrB(sCheck, sMatch)
 If Stopp = 0 Then Exit Function
 'Rechte Grenze bestimmen:
 Length = LenB(sCheck)
 If Start Start Then Exit Function
 LengthPtr = StrPtr(sCheck) - 4
 PokeLng LengthPtr, Start + MatchLen
 End If
 'Ersten Treffer merken:
 InStrRev = Stopp
 Stopp = Stopp + 2
 'Binäre Suche / Intervall-Halbierungs-Verfahren:
 Do
 'Ab Mitte testen:
 Pivot = (Stopp + Start) \ 2
 Index = InStrB(Pivot, sCheck, sMatch)
 'Treffer?
 If Index Then
 InStrRev = Index
 If Index \>= Start Then
 PokeLng LengthPtr, Length
 InStrRev = InStrRev \ 2 + 1
 Exit Function
 End If
 Stopp = Index + 2
 Else
 If Stopp + 8 \>= Pivot Then Exit Do
 Start = Pivot - 1
 PokeLng LengthPtr, Start + MatchLen
 End If
 Loop
 'Konventionell weiter machen:
 Index = InStrB(Stopp, sCheck, sMatch)
 Do While Index
 InStrRev = Index
 Index = InStrB(Index + 2, sCheck, sMatch)
 Loop
 InStrRev = InStrRev \ 2 + 1
 'Bei grossen Zeichenketten könnte es passieren, dass der hintere Bereich
 'mehrmals durchsucht werden müßte. Daher wird der String intern
 '(durch temporäres Patchen der Längenangabe) gekürzt.
 'So müssen bereits durchsuchte Bereiche nicht nochmal durchlaufen werden.
 'Dies geschieht mit Hilfe obiger API-Deklaration
 PokeLng LengthPtr, Length
 Else
 If Start 

Gruß
REinhard