Office - Word, Excel und Co. 9.744 Themen, 41.408 Beiträge

Excel 2010: Zeichenketten umkehren

Olaf19 / 24 Antworten / Baumansicht Nickles

Hallo zusammen!

Ich benötige eine Funktion, die in Excel 2010 Zeichenketten umkehrt, also alle Buchstaben, Zahlen etc. in gespiegelter Reihenfolge anzeigt. Bisschen herumgegooglet und diese, von einem MS-Excel-MVP gepostete Lösung gefunden:

Public Function Spiegeln(rngZelle As Range) As Variant
Spiegeln = StrReverse(rngZelle.Text)
End Function

Siehe auch hier: http://www.office-loesung.de/ftopic115835_0_0_asc.php

Visual Basic geöffnet, Modul hinzugefügt, Code einkopiert und die Mappe als .xlsm-Datei gespeichert - so weit, so gut. Schreibe ich jetzt aber einen String in Zelle A1 und hinterlege in B1 die Formel =Spiegeln(A1), erhalte ich den Fehler #NAME?

Nun datiert dieser Tipp von 2006 und meine Officeversion ist von 2010. Hat sich seitdem irgendetwas an der Syntax von VBA-Befehlen geändert, oder was könnte da sonst falsch gelaufen sein?

THX!
Olaf

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen
gelöscht_265507 Olaf19 „Excel 2010: Zeichenketten umkehren“
Optionen

Hmmm.

Wieso musst du denn die Mappe als .xlsm speichern?

Du gibst das Modul in Visual-Basic ein und wechselst wieder in dein Tabellenblatt, dann gibst du einen Text in A1 ein.

Dann in B1 Einfügen >> Funktion >> Benutzerdefiniert >>> "Spiegeln"

Er fragt dann höflich nach der Zelle und da gibst du dann A1 ein.

Fertig.

Das war jetzt Excel 2000.
Sollte die Syntax nicht mehr stimmen, dann sollte dein Excel 2010 das wohl alleine konvertieren.

bei Antwort benachrichtigen
Olaf19 gelöscht_265507 „Hmmm. Wieso musst du denn die Mappe als .xlsm speichern? Du ...“
Optionen
Wieso musst du denn die Mappe als .xlsm speichern?

Ich verstehe das so, dass alles was irgendwie mit Visual Basic zu tun hat, nur dann gespeichert wird, wenn man das .xlsm (Excel mit Makros) - Format verwendet. Eben getestet, speichern unter .xlsx: da ist in Visual Basic von der Funktion nichts mehr zu sehen, in der xlsm-Datei hingegen schon.

Du gibst das Modul in Visual-Basic ein und wechselst wieder in dein Tabellenblatt, dann gibst du einen Text in A1 ein. Dann in B1 Einfügen >> Funktion >> Benutzerdefiniert >>> "Spiegeln" Er fragt dann höflich nach der Zelle und da gibst du dann A1ein. Fertig.

Genau so hatte ich's gemacht :-(

CU
Olaf

 

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen
gelöscht_265507 Olaf19 „Ich verstehe das so, dass alles was irgendwie mit Visual ...“
Optionen

Möglicherweise hat sich das Verfahren geändert, kann ich bei MickeySoft aber nicht glauben.

Wenn du ein Tabellenblatt offen hast und wechselst dann zu VBA, dann wird das alles in diesem Tabellenblatt gespeichert.

Soll es generell für alle Tabellenblätter gültig sein, dann ist es etwas anders.
Dann muss man Makros anklicken und das für "Alle offenen Arbeitsblätter" freigeben.

Dann hat man es überall, sofern das Ursprungsarbeitsblatt auch geöffnet ist.

bei Antwort benachrichtigen
Olaf19 gelöscht_265507 „Möglicherweise hat sich das Verfahren geändert, kann ich ...“
Optionen

Soweit ich weiß, wurde der Dateityp "XLSM" extra dafür eingeführt, dass nur damit die Makros aus VBA mitgesichert werden. Bei XLS(X) gehen die Makros verloren. Das ist aber AFAIK ausdrücklich so gewollt von Microsoft.

Ist ja auch nicht weiter schlimm, dann speichere ich die Datei eben als xlsm. Mich stört eigentlich nur, dass die Funktion nicht funktioniert (ein Taucher, der nicht taucht, taucht nichts...).

CU
Olaf

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen
neanderix gelöscht_265507 „Hmmm. Wieso musst du denn die Mappe als .xlsm speichern? Du ...“
Optionen

>>Wieso musst du denn die Mappe als .xlsm speichern?<< Weil das seit Office 2007 so verlangt wird. eine Mapp, die als XLSX gespeichert wird, KANN keine VBA-Routinen enthalten.

Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen
mawe2 Olaf19 „Excel 2010: Zeichenketten umkehren“
Optionen
Nun datiert dieser Tipp von 2006 und meine Officeversion ist von 2010. Hat sich seitdem irgendetwas an der Syntax von VBA-Befehlen geändert, oder was könnte da sonst falsch gelaufen sein?

Nein, da hat sich nichts geändert.

Ich habe die Schritte so, wie Du sie beschrieben hast, in Excel 2010 nachvollzogen und es hat auf Anhieb funktioniert.

Schau doch mal ins Sicherheitscenter und kontrolliere, was dort für die Ausführung von Makros festgelegt wurde.

Gruß, mawe2

bei Antwort benachrichtigen
Olaf19 mawe2 „Nein, da hat sich nichts geändert. Ich habe die Schritte ...“
Optionen
Schau doch mal ins Sicherheitscenter und kontrolliere, was dort für die Ausführung von Makros festgelegt wurde.

Das Ding heißt jetzt Wartungscenter ;-) Leider finde ich da weit und breit nichts zum Thema Makros, nur zu Windows Update, Netzwerkfirewall, Windows-Sicherung und -Wiederherstellung.

Ich guck nach dem Mittag nochmal in Ruhe. Normalerweise wurden Makros aber immer ausgeführt, z.B. wenn man die selbst aufgezeichnet und danach "abgespielt" hatte.

THX
Olaf

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen
mawe2 Olaf19 „Das Ding heißt jetzt Wartungscenter - Leider finde ich da ...“
Optionen
Das Ding heißt jetzt Wartungscenter

Das muss ein Missverständnis sein.

Es gibt in Excel 2010 ein sog. "Sicherheitscenter". Du kommst dorthin über "Datei" > "Optionen" > "Sicherheitscenter" > "Einstellungen für das Sicherheitscenter" > "Einstellungen für Makros" *.

Dort wird explizit festgelegt, wie Excel mit Makros umgehen soll. Es kann z.B. festgelegt worden sein, dass Excel alle Makros ohne Benachrichtigung deaktiviert.

Vielleicht liegt die Ursache dort?

Vielleicht ist es aber auch ein ganz banaler Schreibfehler?

Wird denn die Funktion "Spiegeln" korrekt bei den benutzerdefinierten Funktionen ("fx" > "Kategorie auswählen" > "Benutzerdefiniert") aufgelistet?

Gruß, mawe2

PS: * Im Menüband "Entwicklertools" gibt es unter "Code" auch einen kürzeren Weg zu den Sicherheitseinstellungen, nämlich die Schaltfläche "Makrosicherheit".

bei Antwort benachrichtigen
Olaf19 mawe2 „Das muss ein Missverständnis sein. Es gibt in Excel 2010 ...“
Optionen

Danke mawe, habe ich inzwischen gesehen. Ich war auf der Windows-Ebene zugange gewesen. Im Excel-Sicherheitscenter ist zu meiner Überraschung die "lascheste" Makro-Einstellung ausgewählt - also alle Makros zulassen ("nicht empfohlen").

Gilt denn überhaupt für handgemachte Funktionen alles, was auch für Makros gilt? Sind Funktionen eine "Teilmenge" der Makros?

Wo finde ich "fx", Kategorie auswählen etc.? Auch hierzu schweigt sich die F1-Excel-Hilfe beharrlich aus, genau so wie zu allen anderen Fragen :-(

Schreibfehler kann aber doch nicht sein, wenn es bei dir mit dem Einkopieren genau dieses Codes funktioniert hat?

CU
Olaf

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen
mawe2 Olaf19 „Danke mawe, habe ich inzwischen gesehen. Ich war auf der ...“
Optionen
Wo finde ich "fx"

Links neben der Bearbeitungsleiste ("Funktion einfügen").

Auch hierzu schweigt sich die F1-Excel-Hilfe beharrlich aus

Die Excel-Hilfe ist in den letzten Versionen sehr verschlimmbessert worden.

Sind Funktionen eine "Teilmenge" der Makros?

Da bin ich mir auch nicht sicher.

Gruß, mawe2

bei Antwort benachrichtigen
Olaf19 mawe2 „Links neben der Bearbeitungsleiste Funktion einfügen . Die ...“
Optionen

Anscheinend habe ich eine von meinem Arbeitgeber gebrandete Spezialversion von MS Excel erwischt. Ich sehe weit und breit keine solche Leiste, kann auch in den Ansichtsoptionen nichts dergleichen hinzufügen.

Nun gut - inzwischen ist das Rätsel gelöst. In vermeintlich weiser Voraussicht hatte ich das "Modul1" in Visual Basic umbenannt in "Spiegeln". Idee dahinter: könnte ja sein, dass im Laufe der Zeit noch weitere Module dazukommen, und dann ist es ja besser, wenn die einen aussagekräftigen Namen haben. Also statt Modul1, 2, 3, 4, 5... lieber spiegeln, bügeln, rödeln, glattziehen, ausrollen-und-wieder-einfahren...

Und genau das war der Fehler. Das Modul mit dem Spiegeln wurde als erstes Modul in VBA erstellt, ergo muss es Modul1 heißen, sonst kann die Funktion nicht gefunden werden. Ziemlich dämlich, aber was soll's.

Danke an mawe und die Lokomotive fürs Mit-Kopfzerbrechen!

CU
Olaf

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen
mawe2 Olaf19 „Anscheinend habe ich eine von meinem Arbeitgeber gebrandete ...“
Optionen

OK, das Problem ist somit gelöst.

Trotzdem:

Ich sehe weit und breit keine solche Leiste

Die "Bearbeitungsleiste" wirst Du doch ganz sicher schon benutzt haben:

Der Tip am Mauszeiger weist auf die Bezeichnung dieser Leiste hin. Man braucht sie, um längere Zellinhalte komplett angezeigt zu bekommen, was in der Zelle selbst aufgrund von Platzproblemen oft nicht geht. Links daneben (rot eingekreist) ist die fx-Schaltfläche zum Einfügen von Funktionen.

Man kann die Bearbeitungsleiste in den Optionen / Erweitert auch abschalten. Aber ich wüsste nicht, wozu das gut sein soll!

Gruß, mawe2

bei Antwort benachrichtigen
Olaf19 mawe2 „OK, das Problem ist somit gelöst. Trotzdem: Die ...“
Optionen

Aaaah, das hattest du also gemeint... sorry, da habe ich total auf der Leitung gestanden. Dabei benutze ich die jeden Tag *g*. Lediglich diese fx-Schaltfläche kommt bei mir nicht zum Zuge. Der Mensch ist eben ein Gewohnheitstier.

Ja, nun haben wir sogar noch mehr geklärt, als ich ursprünglich wissen wollte. Bliebe allenfalls die Frage, warum man die Modul-Umbenennungsfunktion von VBA nicht nutzen darf, ohne dass die Funktion daraufhin unbrauchbar gemacht wird. Nun ja - man kann nicht alles haben.

THX
Olaf

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen
neanderix Olaf19 „Aaaah, das hattest du also gemeint... sorry, da habe ich ...“
Optionen

Nutzen darfst du die schon. Nur ist es eine schlechte Idee, einem Modul denselben Namen zu geben, wie einer im Projekt enthaltenen Funktion oder Sub. Volker

Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen
Olaf19 neanderix „Nutzen darfst du die schon. Nur ist es eine schlechte Idee, ...“
Optionen

Das verstehe ich nun gar nicht. Wenn das Modul1 eine Funktion beinhaltet, die "Spiegeln" heißt, warum soll dieses Modul dann nicht "Spiegeln" heißen?

Außerdem ist es ja vollkommen wurscht, welchen Namen ich dem Modul gebe. Solange es nicht "Modul1" heißt, verweigert es seinen Aufruf. Damit ist die Umbenennen-Funktion in VBA komplett für den Eimer.

CU
Olaf

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen
neanderix Olaf19 „Das verstehe ich nun gar nicht. Wenn das Modul1 eine ...“
Optionen

Wie gesagt: Das Modul heisst "Spiegeln" die darin enthaltene Funktion ebenfalls. Das führt zu einem Namenskonflikt. Mal ganz abgesehen davon ist es üblich, in einem Modul mehr als eine Routine zu halten, weshalb ein solcher spezieller Name dann auch wenig sinn macht. Warum aber bei dir ein Modul zwingend "Modul1" oder "Modul2" etc heissen muss - also den automatisch vergebenen Namen behalten muss - keine Ahnung. Wenn ich morgen zeit finde, teste ich das mal im Büro, vielleicht finde ich eine Antwort darauf.

Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen
Borlander neanderix „Wie gesagt: Das Modul heisst Spiegeln die darin enthaltene ...“
Optionen
Mal ganz abgesehen davon ist es üblich, in einem Modul mehr als eine Routine zu halten, weshalb ein solcher spezieller Name dann auch wenig sinn macht.

So schaut es aus. Grundsätzlich wäre es da schon besser das Modul dann z.B. OlafsEigeneFunktionen zu nennen. Und angesichts eines fehlenden Namespacekonzept bei VBA wäre es auch eine gute Idee die eigenen Funktionen mit möglichst global eindeutigen Namen zu versehen.

Gruß
bor

bei Antwort benachrichtigen
Olaf19 Borlander „So schaut es aus. Grundsätzlich wäre es da schon besser ...“
Optionen

Salut ihr beiden,

THX für eure Erklärungen - so macht das natürlich absolut Sinn. Das heißt also, ich kann in einem einzigen Modul mehrere Funktionen nacheinander unterbringen, ohne dass alle zusammen ausgeführt werden, also nicht, dass die eine Funktion in die andere hineinläuft, weil der Code direkt danach folgt. Das erklärt natürlich einiges.

Wenn man das weiß, ist es natürlich auch in Ordnung so - es hatte mich anfangs nur verwirrt, weil ich in diesen Fehler absolut keinen Sinn hineinbringen konnte.

Grundsätzlich wäre es da schon besser das Modul dann z.B. OlafsEigeneFunktionen zu nennen.

So etwas in der Art werde ich dann in Zukunft auch verwenden.

CU
Olaf

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen
Borlander Olaf19 „Salut ihr beiden, THX für eure Erklärungen - so macht das ...“
Optionen
Das heißt also, ich kann in einem einzigen Modul mehrere Funktionen nacheinander unterbringen, ohne dass alle zusammen ausgeführt werden

Ja. Das ist der Fall und es ist sogar sehr sinnvoll zusammengehörige Funktionen in einem Modul zu bündeln, bzw. vielleicht auch Funktionen die von der extern aufgerufenen benutzt werden um Teilfunktionalitäten abzubilden. Ich weiß nun gerade nicht ob man Funktionen in VBA auch als private (nur aus dem Modul selbst aufrufbar) deklarieren kann.

So etwas in der Art werde ich dann in Zukunft auch verwenden.

Ggf. könnte man sich bei der Bennung auch am üblichen Verfahren orientieren, dass bei Packages zum Einsatz kommt und den eigenen Domainnamen (in umgedrehter Reihenfolge) als Prefix zu verwenden und hättest dann was in der Richtung: de_olaf19_stringutils

bei Antwort benachrichtigen
neanderix Borlander „Ja. Das ist der Fall und es ist sogar sehr sinnvoll ...“
Optionen

Hi Bor,

ja, das geht, BTDTGTN ;-)

Macht ja auch Sinn.

Volker

Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen
Borlander neanderix „Hi Bor, ja, das geht, BTDTGTN - Macht ja auch Sinn. Volker“
Optionen
BTDTGTN

Müsste ich diese Abkürzung kennen? Google kennt sie nämlich nicht ;-)

bei Antwort benachrichtigen
neanderix Borlander „Müsste ich diese Abkürzung kennen? Google kennt sie ...“
Optionen

Ist auch verunglückt: B een T here D one T hat G ot N o T-shirt

Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen
Olaf19 neanderix „Ist auch verunglückt: B een T here D one T hat G ot N o T-shirt“
Optionen

Da wäre ich jetzt auch nicht unbedingt drauf gekommen... aber schöner Höhepunkt für einen ansonsten eher staubtrockenes Thema :-)

CU
Olaf

Die Welt ist ein Jammertal ohne Musik. Doch zum Glueck gab es Bach, Beethoven, Haendel und Goethe (Helge Schneider)
bei Antwort benachrichtigen
neanderix Nachtrag zu: „Wie gesagt: Das Modul heisst Spiegeln die darin enthaltene ...“
Optionen

Hi Olaf,

ich habe es gerade eben getest. Ergebnis:

1. Man kann ein Modul beliebig umbenennen, es klappt immer - aber

2. ein Modul darf nicht denselben Namen haben, wie eine in diesem oder einem anderen in der Mappe enthaltenen Modul enthaltene Funktion.

Heist auf Deutsch:

Solange das Modul entweder den Standardnamen (also z.B: Modul1) oder einen Namen wie "Olaf10Speziellefunktionen" oder "Meine Besonderenfunktionen" oder "MeineProgrammierVersuche" heist, ist alles in Ordnung.

Sobald du aber, wie im aktuellen Fall, eine funktion namens "Spiegeln" im modul hast, und dann das Modul "Spiegeln" nennst, "knallt es"

Computers are like airconditioners - they stop working properly when you open Windows Ich bin unschuldig, ich habe sie nicht gewählt!
bei Antwort benachrichtigen