| Datenmaske programmieren | Home |
![]()
| Seiteninhalt Microsoft Excel stellt eine so genannte Datenmaske zur Verfügung, mit der Sie auf komfortable Art und Weise die Daten einer Liste bearbeiten können. |
Leserprofil Alle Excel-Anwender und -Programmierer |
![]()
Allgemeines
über die Datenmaske
Links und
Downloads
Bugs und Probleme
Weitere Informationen
Downloads
Allgemeines über die Datenmaske
Mit der ShowDataForm-Methode des Worksheet-Objektes kann man die Datenmaske aufrufen, z.B. mit "ActiveSheet.ShowDataForm". Der Nachteil dieser Methode ist, dass ein Datumswert (z.B. 15.02.2002) in der Datenmaske mit dem englischen Datumsformat (also 2/15/2002) angezeigt wird. Der Grund liegt an VBA als Programmiersprache: Weil VBA grundsätzlich auf Englisch "hört", wird das englische Format benutzt. Eine lokalisierte Formatierungsmöglichkeit existiert nicht. Der Aufruf mittels ShowDataForm ist für "deutsche Daten" somit ungeeignet. Durch das Aufrufen des Datenmaske-Menübefehls mittels Execute wird dieses Problem umgangen.
Das Verhalten der DataForm mit VBA ist tatsächlich etwas eigenartig. Wenn mit "ActiveSheet.ShowDataForm" aufgerufen wird, muss die Datenliste in Zelle A1 beginnen.
Wenn der Datenbereich nicht in A1 beginnt, muss so aufgerufen werden:
Lösung 1
Name "Database" für Datenbereich definieren:
ActiveWorkbook.Names.Add
Name:="Database", RefersTo:="=" &
Worksheets("Tabelle1").Name & "!" &
Range("A10:I40").Address
Range("A10:I40").Select
Worksheets("Tabelle1").ShowDataForm
Lösung 2
Klick auf Symbolleiste-Schaltfläche simulieren:
Range("A10:I40").Select
CommandBars.FindControl(Id:=860).Execute
Auch wenn der Datenbereich in A1 beginnt, würde ich die Maske nicht mit ShowDataForm öffnen, da Datumswerte (z.B. 15.02.2002) in der Maske im US-Format angezeigt werden (d.h. 2/15/2002). Die Lösung 1 ist folglich nicht ganz so gut wie Lösung 2. Der Vorteil von Lösung 1 gegenüber Lösung 2 ist jedoch, dass nach Festlegen des Namens "Database" die Maske jederzeit mit
Worksheets("Tabelle1").ShowDataForm
geöffnet werden kann, ohne den Datenbereich vorher selektieren zu müssen, da wegen "Database" die Maske den Datenbereich bereits kennt.
Es ist tatsächlich so, dass bei Verwendung der ShowDataForm-Methode ein Datum im englischen Format in der Datenmaske erscheint. Der Grund liegt an VBA: Da VBA grundsätzlich auf Englisch "hört", wird das englische Format benutzt. Eine lokalisierte Formatierungsmöglichkeit existiert nicht. Der Aufruf mittels ShowDataForm ist für "deutsche Daten" somit ungeeignet.
Anstelle ShowDataForm kannst Du aber diese Anweisung verwenden:
Application.CommandBars.FindControl(Id:=860).Execute
Damit diese Anweisung klappt, muss eine Zelle der Datenliste selektiert sein oder - geht auch - alle Zellen (inklusive Überschriften!). Wenn nur ein paar Zellen der Datenliste markiert sind, erscheint die Meldung "Spaltenüberschriften konnten nicht bestimmt werden", es sei denn, die markierten Zellen umfassen die Überschriften-Zellen.
Mit der ShowDataForm-Methode lässt sich das nicht bewerkstelligen. Aber es gibt eine Lösung, die ausserdem auch besser ist. (Besser, weil Zellen mit Datum mit deutscher Formatierung, d.h. z.B. DD.MM.JJJJ, in den Maskenfeldern korrekt angezeigt werden. Eine mit ShowDataForm geöffnete Datenmaske verwendet immer das US-Format M/D/YY, auch wenn eine Datums-Zelle das deutsche Format besitzt.)
Datenmaske öffnen und erster Datensatz
zeigen:
Application.CommandBars.FindControl(Id:=860).Execute
Mit einem kleinen Trick kann die Maske gesteuert werden, und zwar indem Tastencodes vorausgeschickt werden. Hier die wichtigsten Aktionen:
DataForm öffnen und zweiter Datensatz
zeigen:
SendKeys "{Down}"
Application.CommandBars.FindControl(Id:=860).Execute
Dritter Datensatz zeigen:
SendKeys "{Down 2}"
Pro weiteren Datensatz einfach die Zahl hinter
"Down" jeweils um 1 erhöhen.
Im ersten Feld die Zahl 5 suchen:
SendKeys "%s{5}%t"
Im ersten Feld die Zahl 5 und im zweiten
Feld den Begriff "Ja" suchen:
SendKeys "%s{5}{tab}{Ja}%t"
Im dritten Feld den Begriff "OK"
suchen:
SendKeys "%s{tab}{tab}{OK}%t"
Hinweis: Mit "%s" wird ALT+S, mit "%t"
ALT+T ausgelöst, was dem Shortcut der Schaltfläche "Suchkriterien" bzw.
"Nächsten suchen" entspricht.
Neuer Datensatz anlegen:
SendKeys "%n{A}{tab}{9}"
Neuer Datensatz anlegen, in erstes Feld
"A" und in zweites Feld "9" eintragen:
SendKeys "%n{A}{tab}{9}"
Hinweis: "%n" ist der Shortcut der Schaltfläche
"Neu".
Wichtig
Damit obiges klappt, muss mindestens eine Zelle der Datenliste selektiert sein,
oder - das geht auch - sämtliche Zellen der Liste (inklusive Überschriften!). Wenn nur
ein paar Zellen der Datenliste markiert sind, erscheint die Fehlermeldung
"Spaltenüberschriften konnten nicht bestimmt werden" (ausser wenn die
markierten Zellen die Überschriften-Zellen umfassen).
Weitere Informationen über SendKeys erhalten Sie hier:
Weitere Informationen |
![]()
Zuletzt aktualisiert am
08.01.2009 / 08:00 Uhr
© 2002-2009 by Philipp von Wartburg, Schweiz
Alle Rechte vorbehalten