Stefan's Weblog

6Jul/120

Anmeldung an Excel-Arbeitsmappe

Mit Hilfe von VBA kann man Abragedialoge ausführen und den Benutzer zur Eingabe bestimmter Informationen auffordern, bevor er mit der Arbeitsmappe arbeiten darf.

In dem nachfolgenden Beispiel wird die Funktionsweise erläutert.
Die Tabelle, in der alle Werte der Anmeldung gespeichert werden sollen wird im Beispiel mit Verant bezeichnet.

Code

Option Explicit


Dim strVerant_Nachname As Variant
Dim strVerant_Vorname As Variant
Public strVerant_Personal As Variant
Dim strVerant_Date As String
Dim strUnternehmen As String
Dim strGroup As String



Sub Verant_Anmeldung()

strUnternehmen = "Unternehmen"
strGroup = "Group"

'
'InputBox für den Nachname
'
   Do
        strVerant_Nachname = InputBox("Bitte Nachname eingeben.", "Nachname", "Nachname")
        If StrPtr(strVerant_Nachname) <> 0 Then
            If strVerant_Nachname <> "Nachname" Then
                        Exit Do
             Else
                MsgBox "Gib deinen Nachnamen ein.", vbExclamation, "Hinweis"           'Fehlermeldung, wenn keine Eingabe erfolgt ist. Der vordefinierte Eintrag "Nachname" ist nichtgültig
            End If
        Else
            MsgBox "Abbrechen nicht gestattet.", vbExclamation, "Hinweis"              'Fehlermeldung, wenn der Button Abbrechen gedrückt wird
        End If
    Loop
    'MsgBox "Geschafft :-)", vbInformation, "Information"


'
'EingabeBox für den Vorname
'
    Do
        strVerant_Vorname = InputBox("Bitte Vorname eingeben.", "Vorname", "Vorname")
        If StrPtr(strVerant_Vorname) <> 0 Then
           If strVerant_Vorname <> "Vorname" Then
                       Exit Do
           Else
              MsgBox "Gib deinen Vornamen ein.", vbExclamation, "Hinweis"           'Fehlermeldung, wenn keine Eingabe erfolgt ist. Der vordefinierte Eintrag "Vorname" ist nichtgültig
           End If
        Else
            MsgBox "Abbrechen nicht gestattet.", vbExclamation, "Hinweis"           'Fehlermeldung, wenn der Button Abbrechen gedrückt wird
        End If
    Loop
    

'
' Eingabe der Personalnummer
' Für die Eingabe sind nur Zahlen erlaubt
'
    Do
        strVerant_Personal = InputBox("Bitte Personalnummer eingeben.", "Personalnummer")
        If StrPtr(strVerant_Personal) <> 0 Then
            If IsNumeric(strVerant_Personal) Then                                               ' IsNumeric erlaubt nur die Eingabe von Zahlen
                If CDbl(strVerant_Personal) >= 1 And CDbl(strVerant_Personal) <= 1000 Then      ' Der Zahlenbereich, der für die Eingabe erlaubt ist
                    If Fix(CDbl(strVerant_Personal)) = CDbl(strVerant_Personal) Then
                        Exit Do
                    Else
                        MsgBox "Bitte nur ganze Zahlen eingeben.", vbExclamation, "Hinweis"
                    End If
                Else
                    MsgBox "Die Personalnummer der Group besteht aus Zahlen zwischen 1 und 1000.", vbExclamation, "Hinweis"
                End If
            Else
                MsgBox "Bitte nur Zahlen eingeben.", vbExclamation, "Hinweis"
            End If
        Else
            MsgBox "Abbrechen nicht gestattet.", vbExclamation, "Hinweis"
        End If
    Loop
    MsgBox "Anmeldung erfolgreich an der Lagertabelle für " & strUnternehmen & " durchgeführt." & vbCr _
            & vbCr _
            & "Have fun!", vbInformation, "Information"                                            'Willkommensnachricht nach erfolgreicher Anmeldung
    
    
' Erst nach erfolgreicher Eingabe werden alle Werte in die Zellen geschrieben



Sheets("Verant").Select                                                ' Tabelle "Verant" wird ausgewählt
    Range("C8").Value = strVerant_Nachname                    ' Fügt den Nachnamen ein
    Range("D8").Value = strVerant_Vorname                     ' Fügt den Vornamen ein
    Range("B8").Value = strVerant_Personal           ' Fügt die Personalnummer ein
    Range("E8").Value = Date                                   ' Fügt das heutige Datum ein
    Range("F8").Value = Time                                   ' Fügt die aktuelle Zeit ein
    

' Ruft weitere Makros auf
Call Verant_Wert

End Sub

Private Sub Verant_Wert()
'
' ' Schreibt die Werte fortlaufenden in die Tabelle 
'
Sheets("Verant").Select
Range("D65536").End(xlUp).Offset(1, 0) = Range("D8") ' Vorname: Übernimmt den Wert aus D8 in die nachfolgende Zelle D9

Range("C65536").End(xlUp).Offset(1, 0) = Range("C8") ' Nachname

Range("B65536").End(xlUp).Offset(1, 0) = Range("B8") ' Personalnummer

Range("E65536").End(xlUp).Offset(1, 0) = Range("E8") ' Datum der Anmeldung

Range("F65536").End(xlUp).Offset(1, 0) = Range("F8") ' Zeit der Anmeldung
End Sub

Erklärung

Der Code-Block besteht aus insgesamt drei Bereichen

  • Bereich zur Deklaration der Variablen
  • Makro Verant_Anmeldung
  • Makro Verant_Wert

Bereiche 1: Variablen Deklaration

Die Variablen werden in diesem Beispiel nicht in einem Makro sondern im Modul deklariert, so dass eine makroübergreifende Verwendung möglich ist. Im Beispiel werden die Variablen für das Makro Verant_Anmeldung und Verant_Wert verwendet.
In diesem Fall ist das eine sinnvolle Maßnahme, da der Benutzer die Werte für die Variablen eingibt und diese dann weiterverwendet werden können.
Im Beispiel wird sogar eine Variable mit Public verwendet, also eine modulübergreifende Variable. Somit ist es möglich, die Personalnummer in jedem Makro mit strVerant_Personal aufzurufen, ohne sie erneut zu deklarieren und den Wert zu holen. Der Wert der Variable verbleibt fest im Speicher.

Bereich 2: Makro Verant_Anmeldung

Das Makro besteht aus mehreren Teilen. Im ersten Bereich wird der Nachname des Benutzers durch eine Inputbox abgefragt. Der eingegebene Wert wird zur späteren verwendung der Variable strVerant_Nachname übergeben.
Die Eingabe fordert die Eingabe eines Wertes, sollte kein Wert eingegeben werden, dann erscheint automatisch die Meldung "Gib deinen Nachnamen ein". Das Abbrechen des Vorgangs durch den Benutzer ist ebenfalls nicht gestattet. Klickt er auf den Button Abbrechen, erscheint die Meldung "Abbrehcen nicht gestattet".

Der zweite Bereich frägt den Vornamen ab und ist analog zur Abfrage des Nachnamens zu betrachten.

Im dritten Bereich wird die Personalnummer abgefragt. Hier ist eine Besonderheit verbaut. Der Benutzer muss einen numerischen Wert eingeben, da sonst eine Fehlermeldung ausgegeben wird. Außer dieser Besonderheit ist die Abfrage analog zu den beiden vorherigen zu betrachten.

Im vierten Bereich werden die erfassten Daten, also Nachname, Vorname und Personalnummer in die Tabelle "Verant" in angegebenen Zellen geschrieben.
Hier wird auch die Verwendung der Variablen deutlich. Der Inhalt der Variablen wird als Wert in die angegebenen Zellen "entleert".

  • strVerant_Nachname --> C8
  • strVerant_Vorname --> D8
  • strVerant_Personal --> B8
  • Date --> E8
  • Time --> F8
  • Die Variablen Daten und Time sind fest in VBA integriert und müssen nicht mehr definiert werden.

    Nun könnte man mit dem Ergebnis zufrieden sein. Die Anmeldung war erfolgreich und die Werte (Nachname, Vorname, Personalnummer, Datum, Uhrzeit) wurden in die Zellen in der Tabelle "Verant" geschrieben.

    Was passiert aber, wenn man die Tabelle schließt und wieder öffnet?
    Es werden die eingetragenen Werte überschrieben. Es ist also noch nicht möglich eine Historie anzulegen, um zu sehen, wer alles mit dieser Arbeitsmappe gearbeitet hat.

    Damit die Anmeldungs werte fortlaufend in die Tabelle "Verant" geschreiben werden, ist das Makro Verant_Wert erforderlich. Es wird mit Hilfe des Call-Befehls direkt nach dem Schreiben aller Informationen Nachname, Vorname, Personalnummer, Datum und Zeit aufgerufen und kopiert die Werte in die nächste freie Zeile.

    Schaut man sich den Screenshot an, wird einem das Prinzip klar. Alle neu eingegebenen Werte werden in die Zeile 8 geschrieben und sofort in die nächstmögliche frei Zeile kopiert.
    Meldet man sich also noch ein paar mal an, dann passiert folgendes

    • Neue Werte werden in die Zeile 8 geschrieben
    • Neue Werte werden in die Zeile 13 kopiert
    • Neue Werte werden in die Zeile 8 geschrieben
    • Neue Werte werden in die Zeile 14 kopiert
    • Neue Werte werden in die Zeile 8 geschrieben
    • Neue Werte werden in die Zeile 15 kopiert
    • Neue Werte werden in die Zeile 8 geschrieben
    • Neue Werte werden in die Zeile 16 kopiert
    • ...

    Download

    Anmeldung
    Die zip-Datei erhält noch zwei weitere Makros die jeweils im Code dokumentiert sind.

    hat dir dieser Artikel gefallen?

    Dann abonniere doch diesen Blog per RSS Feed!

Kommentare (0) Trackbacks (0)

Zu diesem Artikel wurden noch keine Kommentare geschrieben.


Leave a comment

Noch keine Trackbacks.

n/a
%d Bloggern gefällt das: