Datenmaske programmieren Home Home

WB01727_.gif (1537 Byte)

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

WB01727_.gif (1537 Byte)

Inhalt

arrow_r.gif (830 Byte) Allgemeines über die Datenmaske

arrow_r.gif (830 Byte) Datenmaske aufrufen

arrow_r.gif (830 Byte) Limitationen der Datenmaske

arrow_r.gif (830 Byte) Links und Downloads
    Bugs und Probleme

    Weitere Informationen
    Downloads

Zum Seitenanfang


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.

Zum Seitenanfang

 


Datenmaske aufrufen

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

Senden von Tastenbefehlen

Zum Seitenanfang

 


Limitationen der Datenmaske

 

 

Zum Seitenanfang

 


Links und Downloads

Bugs und Probleme

 

Zum Seitenanfang

 

Weitere Informationen

 

Zum Seitenanfang

 

Downloads

 

Zum Seitenanfang

WB01727_.gif (1537 Byte)

Haben Sie Fragen, Anregungen oder einen Fehler entdeckt?
Mail senden an philipp_von_wartburg@yahoo.de

Zuletzt aktualisiert am 08.01.2009 / 08:00 Uhr
© 2002-2009 by Philipp von Wartburg, Schweiz
Alle Rechte vorbehalten