Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1752to1756
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Formatierung Währung (Euro)

VBA Formatierung Währung (Euro)
25.04.2020 12:12:35
W
Hallo Forum,
immer wieder sind meine als Währung (Euro, 2 Dezimalstellen, rot und mit Minuszeichen) formatierten Beträge in der Darstellung verändert. Jetzt habe ich die Ursache gefunden - eine Lösung ist mir nicht bekannt.
Vor einiger Zeit habe ich mir ein VBA--Tool erstellt, mit dem ich in vorgegebenen Excel-Mappen bestimmte Makro-Module austauschen kann. Das hat lange Zeit problemlos funktioniert.
Mit VBProject.VBComponents.Remove wird das alte Modul entfernt, und mit VBProject.VBComponents.Import das neue importiert. Jetzt habe ich festgestellt, dass durch diesen Vorgang die Darstellung in der umgestellten Mappe verändert wurde.
Bei der Formatierung der Beträge hat der Recorder folgendes auffgezeichnet:
Selection.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"
Ich möchte dazu erwähnen, dass ich seit einiger Zeit "Microsoft Office Home and Student 2019" im Einsatz habe. Möglicherweise liegt es auch an dieser Excel-Version.
Ich habe eine Test.Mappe erstellt. Bitte die Hinweise auf dem Tabellenblatt beachten. Diese Mappe ist hier zu finden:
https://www.herber.de/bbs/user/137028.xlsm
Gruß
W H21

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Formatierung Währung (Euro)
26.04.2020 11:21:51
Luschi
Hallo W H21,
habe mir das Problem mal angesehen und auch bei mir wird umformatiert. Ich benutze Excel 2019 Pro+ als Standalone-Version ( also nicht 365).
Da ich sehr viel mit Vba-Code-Austausch arbeite, interessiert mich dieser Effekt natürlich sehr. Allerding lösche/leereeere ich in der Austauschdatei alle Vba-Komponenten (Tabellen-Klassenmodule, Formulare, normale Module, sonstige Klassenmodule) und ersetze sie vollständig.
Dabei ist mir dieses Verhalten der Umformatierung noch nie vorgekommen; deshalb werde ich weiter TESTEN!
oT: zur Info ...
26.04.2020 11:32:13
neopa
Hallo Luschi,
... habe Dir eine Mail gesendet.
Gruß Werner
.. , - ...
Anzeige
AW: VBA Formatierung Währung (Euro)
26.04.2020 13:11:32
W
Hall Luschi,
vielen Dank für Deine Antwort.
Inzwischen habe ich einen anderen Test gemacht, bei dem das Problem ebenfalle auftritt. Es hat also nichts mit dem Import zu tun, sondern - nach meinen Erfahrungen - damit, dass aus einer Mappe heraus eine weitere Mappe geöffnet, und dort in irgend einer Weise eine Änderung vorgenommen wird.
Hier mein - sehr kurzer - Testcode; der Name der Test-Mappe muss natürlich noch angepasst werden:
Function WBOpen()
Const xlsFile = "D:\MyExcel\Herber\VBADemo8.xlsm"  ' 
Wichtig dabei ist, dass in der zu öffnenden Test-Mappe auf Zelle D3 ein als Euro-Währung formatierter Wert steht. Das Format dieser Zelle wird vor und nach der Änderung mit Debug.Print angezeigt. Wenn man dann den oben genannten Code erneut ausführt, sieht man, dass sich das Format verändert hat.
Gruß
W H21
Anzeige
AW: VBA Formatierung Währung - gelöst
26.04.2020 17:14:25
W
Hallo an alle,

das Problem ist gelöst.

Ein Bekannter hat Kontakt zu einem Microsoft-Mitarbeiter in den USA. Wegen Corona sind ja viele zuhause. Und der MS-Mitarbeiter hat die Lösung für das von mir gemeldete Problem ermittelt:
Workbooks.Open Filename:=WBFile, local:=True
Dieser kleine Zusatz beim Öffnen einer Mappe per Makro ist dafür zuständig, die lokalen Einstellungen beim Speichern zu behalten.
Ich habe das in meinen oben genannten neuen Code eingebaut; das Problem tritt jetzt nicht mehr auf.
Gruß
W H21
AW: VBA Formatierung Währung - gelöst
27.04.2020 11:25:25
Luschi
Hallo W H21,
bei mir hilft Dein Hinweis auf 'Local:=True' gar nichts, denn nach dem Code-Austausch und vor dem Schließen ist das Zahlenformat: Währung mit Tausenderpunkt, 2 Dezimalstellen und negative Zahlen ROT
Nach dem Schließen und erneutem Öffnen (auch mit dem Local-Zusatz) ist das Zahlenformat geändert auf - Benutzerdefiniert: €#.##0,00_);[Rot](€#.##0,00).
Schon sehr merkwürdig, was ich im meiner VbaCode-Austausch so noch nie feststellen konnte.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: VBA Formatierung Währung - gelöst
27.04.2020 12:42:44
W
Hallo Luschi,
nachdem ich auf "local:=true" aufmerksam wurde, habe ich im Internet gesucht und viele Treffer gefunden. Aber ich habe bisher kein einziges Beispiel gefunden, bei dem eine Mappe mit diesem Zusatz geöffnet wurde. Der Parameter macht ja auch nur dann wirklich Sinn, wenn die geöffnete Mappe durch den VBA-Code verändert und anschließend gesichert wird. Meist waren es CSV.Files. Aber ich habe den Parameter auch in Verbindung mit Saveas gefunden. Einfach einmal im Internet schauen.
Mir ist auch Deine Vorgehensweise nicht bekannt. Kannst Du das einmal mit wenigen Stichworten beschreiben. Welche Workbooks-Befehle werden dazu verwendet. Und was ist mit den Blättern, in denen die Euro-Werte stehen. Was passiert mit denen?
Gruß W H21
Anzeige
AW: VBA Formatierung Währung - gelöst
27.04.2020 14:08:37
Luschi
Hallo W H21,
meine Arbeitgeber entwickelten die Excel-Oberfläche
- Tabellen mit Formeln, Farben, bedingter Formatierung, Gültigkeitslisten usw.
Ich dagegen werkelte am Vba-Code
- Ereignisse/Events, Formulare, Klassen- und sonstige Module
Um nun meinen Code in ihre umgestalteten Arbeitsmappen zu kriegen, macht mein Excel-AddIn Folgendes:
- aus meiner Arbeits-AM allen Vba-Code in ein leeres Verzeichnis exportieren
- in der umgestalteten AM des Arbeitgebers sämtlichen Vba-Code entfernen
- und meinen exportierten Vba-Code in die umgestaltete AM importieren
In all den Jahren hat sich kein Arbeitgeber beschwert, daß dabei Umformatierungsprozesse (wie bei Dir) stattfanden. Früher konnte ich in einem Rutsch sogar
- die Vba-Kennwörter ensperren
- Vba-Code austauschen
- Vba-Kennwörter wieder setzen
Das ist so seit ca. 4/5 Jahren nicht mehr möglich, denn M$ tut Einiges, daß das Vba-Kennwort mit Vba nicht mehr ohne Weiteres manipulierbar ist. Jetzt muß ich das Ganze in 3 Etappen machen:
- Vba-Kennwort aufheben und sofortiges Makroende
- Makro neu starten und Vba-Code Austauschen und Makroende
- Makro neu starten und Vba-Code setzen mit sofortigem Makroende
Wenn man Schritt 1 & 3 dabei nicht beachtet, bleibt das Vba-KW gesperrt oder wird nicht neu gesetzt.
Habe mein AddIn gerade noch mal auf ein viel formatierte AM losgelassen und alles ist Paletti.
Was bei Deinem Code passiert, ist mir immer noch nicht klar. Wenn man vor dem Schließen einen Haltepunkt setzt, ist die Formatierung noch OK, aber nach dem Schließen und wieder Öffnet ist es passiert - warum ?
Aber ich teste noch ein bischen weiter. Daß Du neue Vba-Routinen dabei einbaust, kann nicht die Ursache sein, denn bei meinen Enwicklungen passiert das ja ständigt und ich verschiebe auch Vba-Teile in andere Module bzw. es kommen neue dazu oder fallen andere weg.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: VBA Formatierung Währung - gelöst
27.04.2020 15:42:38
W
Hallo Luschi,
die Bedeutung von "Local" z. B. bei WorkBooks.Open:
Mit True werden Dateien in der Sprache von Microsoft Excel (einschließlich der Einstellungen der Systemsteuerung) gespeichert. False (Standard) speichert Dateien mit der Sprache von Visual Basic for Applications (VBA) (was für gewöhnlich Englisch (USA) ist, es sei denn, das VBA-Projekt, wobei „Workbooks.Open“ ausgeführt wird, ist ein altes internationalisiertes XL5-/95-VBA-Projekt).
Nachzulesen hier:
https://docs.microsoft.com/de-de/office/vba/api/excel.workbooks.open
In meinem Fall ist folgendes passiert: meine Währungswerte waren Local formatiert
Public Const FormelEuroMinus As String = "#.##0,00 €;[Rot]-#.##0,00 €"
....Cells(x,y).NumberFormatLocal = FormelEuroMinus
Da mein Open ohne Local:true ausgeführt wurde, wurde die Formatierung beim Sichern auf den Standard-Wert gesetzt. Die Berechnung stimmt zwar noch immer, aber die Darstellung ist nicht die, wie sie bei mir vorher war.
Wenn man sich die Formatierung nach einem neuen Open mit Debug.Print ausdruckt, sieht man:
"€#.##0,00_);[Rot](€#.##0,00)"
Hast Du meinen Code WBOpen (26.04.2020 13:11:32) mit der Option "local:=true" schon einmal probiert. Du musst in dem Code lediglich beim WorkBooks.Open den Zusatz "local:=true" angeben. Dann werden Lokale Formatierung nicht mehr in Standard-Formatierungen umgewandelt. Man sieht es erst, wenn man die Mappe erneut öffnet.
Gruß
W H21
Anzeige
AW: VBA Formatierung Währung - gelöst - Nachtrag
30.04.2020 16:18:37
W
Hallo, liebe Leser dieses Beitrags,
bei der "Reparatur" meiner falschen Mappen bin ich auf ein Problem gestoßen.
Ich habe verschiedene Mappen durchforscht, in welcher Zelle die falsche Formatierung
.NumberFormatLocal = "€#.##0,00_);[Rot](€#.##0,00)"
vorhanden war, und alle gefundenen Zellen mit:
.NumberFormatLocal = "#.##0,00 €;[Rot]-#.##0,00 €"
ersetzt.
Workbooks.Open FileName:=XlsmFile, Local:=True
Trotz der Tatsache, dass ich die Mappe mit dem Zusatz "Local:=True" geöffnet hatte, wurde die Mappe zwar gesichert, aber wieder mit der alten Formatierung:
Den Parameter "Local:=True" gibt es bei Workbooks.Close nicht. Deshalb habe ich zusätzlich vor dem Close folgendes eingefügt:
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs FileName:=XlsmFile, Local:=True
Application.DisplayAlerts = False
Dabei ist zu beachten, dass bei "Saveas" und unverändertem File-Namen die Frage gestellt wird, ob die File ersetzt werden soll. Mit DisplayAlerts konnte diese Frage unterdrückt werden. Tatsache ist aber, dass die Default-Antwort "Nein" ist, und somit auch keine Sicherung stattfindet. Es ist zusätzlich eine "Workbooks.Close" mit dem Zusatz "SaveChanges:=True" erforderlich.
Nach dieser Änderung wurde die aktuelle Mappe ersetzt, und hat nun den "richtiggestellten" Inhalt.
In dem Test-Code, den ich weiter vorne in diesem Beitrag erwähnt hatte, ging es nur darum, eine Änderung an der Mappe vorzunehmen und dadurch zu dokumentieren, dass dieser Vorgang die genannte Formatierung bei Workbooks.Close verändert. Warum dann bei "Open Local:=True" die Formatierung nicht verloren ging, kann ich nicht beantworten.
Gruß
W H21
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge