2012-10-12 10 views
7

Gegenwärtig bin ich mit Problemen konfrontiert, die mich sehr beunruhigen. Ich hoffe, dass mir jemand helfen kann. Ich arbeite für große Unternehmen, wo sowohl Office 2007 (32bit) als auch Office 2010 (64bit) verwendet werden. Makros zu schreiben, um durch die ganze Firma kompatibel zu sein, war eine schwierige Aufgabe für mich (ich habe noch nie in VBA programmiert - eigentlich hat mir dieses Forum sehr geholfen). Meine Aufgabe besteht darin, eine große Tabelle in einem gemeinsamen Excel-Blatt zu verwalten. Es gibt mehrere Makros und mehrere Benutzerformen. Jetzt werde ich das Problem kurz entschlüsseln: Blatt enthält zwei Spalten mit Datumsformat (Startdatum und Schliessdatum). Beide Werte werden in die Textfelder des Spaltenformulars importiert (commandbutton lunches MsCal -exported to class-), die diese Textfelder mit Datum füllen. Was ich einfach brauche, ist das Datumsformat als mm/dd/yyyy in beiden Spalten, um Filterung und andere Operationen durchzuführen. Wenn diese Werte von einem Worker aktualisiert werden, der eine andere Lokalisierung als Englisch verwendet, wird das US-Datum als dd.mm.yyyy eingegeben. Das macht eine korrekte Filterung basierend auf dem Datum unmöglich. Ich habe versucht, die Formatierung zu ändern durch:Gleiches Datumsformat über mehrere Lokalisierungen

UserForm1.TextBox10.Value = Format(Calendar1.Value, "mm/dd/yyyy") 

aber dieses Stück Code missverstehen sich irgendwie. Bei manchen Geräten funktioniert es, bei einigen funktioniert es nicht. Und das gibt mir Kopfschmerzen. Wie soll ich jetzt vorgehen? Gibt es eine Möglichkeit, Excel zu zwingen, das gleiche Datumsformat im Arbeitsblatt zu verwenden und Lokalisierungseinstellungen in Windows zu ignorieren? Mitarbeiter möchten die Lokalisierung nicht in Englisch ändern, da sie entweder an ihr Format gewöhnt sind oder es für andere Anwendungen benötigen. Gibt es eine Möglichkeit, die Lokalisierung nur vorübergehend zu ändern, wenn sich dieses Blatt öffnet? Jeder Rat wird geschätzt. Vielen Dank im Voraus Peter

+0

Ein Datum in einer Excel-Zelle sollte ein Datum und keine Zeichenfolge sein. Wenn Sie das Zellenformat auf ein Datumsformat setzen, dem ein Sternchen * vorangestellt ist (normalerweise die ersten beiden Optionen in der Option Zellen/Datum formatieren), ändert sich das Datum in die lokale Datumsformatierung des Benutzers. Die zugrunde liegende Zelle ist jedoch immer noch eine Datums-Seriennummer, die unabhängig vom Format verwendet werden sollte. Wenn Sie Daten in ein Textfeld eingeben oder Zeichenfolgen in Datumsangaben konvertieren möchten, ist dies eine andere Angelegenheit, und es ist eine zusätzliche Behandlung erforderlich. Siehe http://stackoverflow.com/questions/12495504/how-to-convert-a-string-into-date/12497237#12497237 – user3357963

+0

@PeterT. In der Tabelle wird die Datumsspalte als Text oder als Datum formatiert? – CaBieberach

+0

Als Datum formatiert – PeterT

Antwort

1

Das Beste, was Sie tun können, ist, NIE eine Datumsvariable in Text umzuwandeln.

Intern für Excel ein Datum ist nur eine fortlaufende Nummer (Links vom Dezimaltrennzeichen sind Tage und rechts vom Dezimaltrennzeichen sind Stunden). So ist zum Beispiel die 10. Juni 2012, für Excel ist . Dieser Datumswert ist unabhängig vom Datumsformat auf Ihrem Computer.

Jetzt, wenn es darum geht, Daten darzustellen (für Menschen zu visualisieren) formatiert Excel diesen internen Wert in eine Zeichenfolge mit dem Format, das in Ihrem Computer festgelegt ist. Wenn Sie beispielsweise ein US-Datumsformat in Ihrem Computer haben, wird das Datum 41188 als 6/10/2012 formatiert.

Die große Herausforderung bei Daten besteht darin, das Datum im richtigen Format einzugeben.Wenn Sie ein Datum als Zeichenfolge eingeben ("6/10/2012"), interpretiert Excel das Datum entsprechend dem auf Ihrem Computer eingestellten Datumsformat. Wenn Sie ein US-Format haben, wird die erste Ziffer als Monat, die zweite als Tag und die letzte als Jahr angezeigt. Wenn Sie ein deutsches Format haben, wird das erste als Tag, das nächste als Monat und das letzte als Jahr gelesen. Also, die gleiche Eingabe ("6/10/2012") für ein US-Format Excel wird 10. Juni lesen, wie für ein deutsches Format Excel wird 6. Oktober lesen.

In Ihrem Fall sollten Sie das Datum nicht innerhalb der Textbox10 formatieren. Für ein US-Format Excel gibt es kein Problem, aber wenn Sie ein anderes Datumsformat haben, bei dem die erste Ziffer der Tag anstelle des Monats ist, erhalten Sie die falschen Werte: Überprüfen Sie dieses Beispiel. Benutzereingaben 10. Juni in einer deutschen Format Excel (TT.MM.JJJJ)

  1. Calendar1.Value ruft einen Datumswert()
  2. Format(Calendar1.Value, "mm/dd/yyyy") verwandelt den Datumswert in einen String „06.10.2012 "
  3. Wenn Sie das formatierte Datum (STRING) verwenden, muss Excel interpretieren, welches Datum es ist. Da das Datumsformat des Computers Deutsch ist, lautet es Tag: 06, Monat: 10, Jahr: 2012. Sie werden mit Tag statt

Wenn Calendar1.Value einen Date-Variable abruft und geben Sie diese Datumsvariable in eine Date-formated Spalte, Sie und wird immer die richtige dale in Ihren Spalt und Sie werden in der Lage sein, Datumsangaben korrekt zu filtern und zu sortieren, unabhängig vom Datumsformat, das in den Zellen der Spalte oder dem auf dem Computer des Benutzers festgelegten Format festgelegt ist.


nun in Ihrem Fall wäre die beste direkt die Calendar1.Value auf die gewünschte Zelle zuzuordnen sein. Etwas wie:

ThisworkBook.WorkSheets("Sheet1").Range("C3").Value= Calendar1.Value 

Sie können noch asign Calendar1.Value in die TextBox10 für den Benutzer seine Auswahl zu sehen, aber die TextBox10 deaktivieren, so dass die einzige Option Bearbeiten der Kalender-Steuerelement ist. Und wenn Sie mit dem Datum arbeiten, anstatt es von der TextBox10 zu takten, nehmen Sie es direkt von der Calendar1.Value.

Wenn Sie den ausgewählten Wert aus Calendar1 weiterhin in einer TextBox anzeigen müssen, formatieren Sie das Datum NICHT in der Textbox. Verwenden Sie stattdessen:

UserForm1.TextBox10.Value = Cstr(Calendar1.Value) 

Auf diese Weise wird der Benutzer das Datum im Datumsformat sehen, dass er in seinem Computer gesetzt hat und zu denen er früher.

+0

Vielen Dank. Diese Art von Antwort habe ich gesucht. – PeterT

0

Eine Lösung ist nicht das Datum Zahlenformat zu verwenden, sondern nur das benutzerdefinierte Format verwenden für alle Zellendaten in dem Sie "mm/dd/yyyy" als Formatierungszeichenfolge angeben. Wenn die regionalen Einstellungen Ihres Computers jedoch auf "mm/dd/yyyy" eingestellt sind, dann wird nach meiner Erfahrung eine benutzerdefinierte Zellenformatierung mit derselben Zeichenkette erstellt, die als Dater mit der Computereinstellung verknüpft bleibt, so dass Ihnen das nicht weiterhilft. Die Art und Weise, wie ich daran gearbeitet habe, war, das Datumsformat auf meinem Computer zu ändern, dann die Zellen als benutzerdefiniert "MM/TT/JJJJ" zu formatieren und zu speichern (und dann die Computereinstellungen wieder so zu machen wie sie waren) Da es sich um Datumszellen handelt, sehen Sie, dass das Ändern der Einstellungen auf Ihrem Computer den Wert in der Zelle nicht ändert.

Ich denke, eine andere Möglichkeit besteht darin, immer eine Zelle neben Ihrer Datumszelle zu haben, die die TEXT-Funktion aufruft. Also, wenn Sie ein Datum in A1 haben dann in einer anderen Zelle =TEXT(A1, "mm/dd/yyyy") und beziehen Sie sich nur auf diese neue Zelle. Aber das könnte Ihre Tabellenkalkulation sehr unordentlich machen.

Ich denke, die beste Lösung ist nur IT-Abteilung zu bekommen, um jeden in den Datumseinstellungen des Unternehmens zu setzen, um die gleichen Formate zu verwenden.

+0

Dan, danke für Ihre Antwort. Das bedeutet, dass das Ändern des Zellenformats auf Benutzerdefiniert zu Fehlfunktionen anderer Makros führen würde, die für die Berechnung von Metriken, Pivots usw. verwendet werden. Für dieses Makro muss das Zellformat für das Datum festgelegt werden. Dieses Makro wird auf einer anderen Site gespeichert.Darüber hinaus wird die ganze Datei remote auf schwach Basis von Programm aktualisiert, das Zellen formatiert auf seinen Standardstatus setzt (festgelegt durch Programm). Wenn nichts hilft, denke ich, dass ich die IT-Abteilung kontaktieren muss, wie Sie erwähnen. Aber um ehrlich zu sein, möchte ich dieses Szenario vermeiden. – PeterT

+0

Also abschließend kann ich Tabelle nicht ändern (Spalten hinzufügen/entfernen, Format ändern usw.). Ich kann nur VBA-Code ändern, der Daten in Tabelle schreibt. – PeterT

+0

was ist das: UserForm1.TextBox10.Value = Arbeitsblatt.Text (Calendar1.Value, "MM/TT/JJJJ") – Dan