Eingabemaske VBA Office2010

Hallo,
ich habe ein Problem und wollte erstmal wissen ob es überhaupt lösbar ist.
Ich habe 1 Projektplan und möchte dafür eine Eingabemaske mit VBA generieren.
Eine simple Maske - kein Thema, das die Maske bei der Übernahme in der Tabelle auf die 1. freie Zeile schreibt - auch kein Problem.
Nun möchte ich aber nicht für jede Zeile, die ich schreiben möchte, die Maske öffnen.

Zeile 1: Projekt
Zeile 2: Augabe + Person1 + Zeitraum
Zeile 3: Augabe + Person2 + Zeitraum
Zeile 4: Augabe + Person3 + Zeitraum
Zeile 5: Augabe + Person4 + Zeitraum

Nun fallen mir 2 Möglichkeiten ein.

  1. Die Maske so groß gestallten das ich alles in einen Fenster eintragen kann. Bekommt Excel das dann aber hin, alles geordnet und sauber untereinander in die Tabelle zu schreiben, da es ja mehrere Zeilen gleichzeitig beschreibt? Oder herscht dann „stau“ auf der 1. freien Zeile, weil die Maske dort alles schreiben will?

  2. Ich baue eine kleine Maske wo ich jede Zeile einzeln eintrage und mit einem „weiter“ button in eine nächste Maske springen kann für zeile2, usw + einen Button „übernehmen“ um es dann in die Tabell zu schreiben.

Was wäre die besser Lösung, bzw. welche würde funktionieren.
Mir persönlich wäre Lösung 1 lieber.

PS: Ich beschäftige mich erst seit kurzem mit VBA. Daher bitte ich um nachsicht wenn ich eine Sache nicht gleich verstehe.

Schonmal danke im vorraus.
MfG
blacktiger742728

Hallo,
so wie ich sehe hast du ein Problem in MS Excel. Ich bin mehr auf MS Accesss fokusiert. Das Wording ist auch bei Excel etwas anderst. Besser wäre es wenn du ein Experte in MS Excel suchst, der hat vielleicht auch ein leichteren Ansatz zu deinem Problem.
VG

Hi Tiger,

Was ist für Dich eine „simple Maske“?
Wenn Du mit einer normalen Userform arbeitest, kannst Du natürlich Variante 1 hinbekommen. Die Userform gestaltest Du mit den zur Verfügung stehenden Elementen wie z.B Textbox etc. Dann erstellst Du eine Befehlsschaltfläche mit der Du den "Private Sub CommandButton1_Click() "-Code startest. In diesen Code kannst Du nun alles programmieren, was Du möchtest. Also, die suche nach der nächsten freien Zelle (z.B: FreiesFeld = Range(„A1048576“).End(xlUp).Offset(1, 0).Row) und dann welchen Text er wohin übertragen soll (z.B. Cells(FreiesFeld, 1) = TextBox1.Text).
Ich hoffe, Dir hilft das schonmal.

Gruß
Arnold

Jepp, das ist eine einfache Maske für mich. Da ich in der Maske ja eigentlich mehrere Einträge schreibe die dann in der Tabelle untereinander stehen müssen,kommt dann das excel durcheinander wenn ich nur sage:Beim übernehmen schreibe in die nächste freie Zeile?
Die Werte werden ja theoretisch alle gleichzeitig in die Tabelle geschrieben bei dem Klick auf den Übernehmen Button.Oder habe ich da einen Denkfehler drin?

Es stellen sich einige Fragen:
Tabelle klingt nach Excel, ist das richtig?
Wo landen die Daten? In einer Mappe, in einer Tabelle?
Für wie viele Personen soll das sein?
Werden die Personen nacheinander aufgerufen und die Felder gefüllt (1 dann 2, dann 3) oder kann es auch durcheinander vorkommen (1, dann 4, dann 2, dann 3…)?
Kommt es vor, dass eine Person im lfd. Zeitraum keine Daten eingibt?
Wo bleibt der nächste Zeitraum (weitere Tabelle oder unten anhängen)?
Definiere Augabe (Zahl, Währung, Text,…)
Person1 ist sicher ein Dummy, hinter dem sich ein Name versteckt, ist das so?
Wo werden die Personen gepflegt?
Wie wird anschließend ausgewertet (nach Personen, nach Augabe oder nach Zeitraum sortiert)?

Hallo
Projekt 1 ist vermutlich aufwendiger zu Programmieren als Projekt 2. Beide werden funktionieren.

Grüsse Sebastian

Hallo Tiger,

Da gehe ich dann mal vom Denkfehler aus :wink:
Excel und VBA machen nur das, was Du in den Code reinschreibst. Also, dass von selbst irgendwas in irgendeine freie Zelle geschrieben wird ist mir neu. Beim Klick auf Deinen Übernehmen-Button wird also Programmschritt für Programmschritt abgearbeitet. Wenn Du das testen willst, setze Dir einen Haltepunkt und gehe dann mit F8 Schritt für Schritt weiter.
Hier mal Beispielcode (zum Verständnis) für eine Userform mit einer Befehlsschaltfläche und einer Textbox.
Den Code gibst Du ein, indem Du im VBA-Editor doppelt auf die Befehlsschaltfläche klickst.

Private Sub CommandButton1\_Click()
UserForm1.Hide
FreiesFeld = Range("A1048576").End(xlUp).Offset(1, 0).Row
Cells(FreiesFeld, 1) = TextBox1.Text
For i = 1 To 5
Range("A1048576").End(xlUp).Offset(1, 0).Select
ActiveCell.Value = i
Next
End Sub

Gruß
Arnold

Hallo,

das klassische Herangehen ist in der Tat Variante 2. In Access lässt sich das zum beispiel vollständig mit den Assistenten generieren. Im 1. Formular, dem Hauptformular wird ein weiteres Formular in den Detailbereich erstellt. dies ist das Unterformular, welches die einzelnen Datensätze anzeigt. Lediglich das verknüpfende Element wird mitgeteilt.

gegrüßt!

Excel klingt richtig. Die Daten landen in einer Tabelle. Die anderen Fragen sind glaube ich zu kompliziert gedacht. Der einzige der einträgt bin ich bzw ein Kollege. Die Personen zu den Aufgaben werden manuell in die Maske geschrieben, Der Zeitraum wird in der Maske mit Start und Enddatum eingegeben. Als Ausgabe brauche ich Zahlen, Text und Datum.
Soweit das ich Personen pflege, wollte ich eigentlich nicht gehen. :wink: Eine Auswertung gibt es in dem Sinn nicht, da man vlt. auch to-do liste sagen könnte. Also welche person macht wann was.

Ich kenn mich damit zu wenig aus, ob es das in excel auch gibt. Aber ich werde wohl doch variante 1 probieren, da ich da alle Daten zu einem Projekt auf einen Blick habe und z.B. den Datumsabgleich zwischen Aufgabe 1 und 2 besser sehe.

ok, ich werde mal meine variante 1 probieren. schaun wir mal ob ich es hin bekomme.
Wenn die Maske steht und es noch ein paar probleme mit der programmierung gibt würde ich gern auf dich zurück kommen, denn da schau ich noch wie ein schwein ins uhrwerk :wink:.

ich kann ihnen leider nicht folgen. mir ist in ihrer Beschreibung nicht klar was in der eingabemaske stehen soll und was es da mit der ersten freie zelle zu schaffen hat.

Ok, Problem 1 ist da und das am Anfang. Hab 5 Textfelder + 1 buttom zum übernehmen. Nun hab ich folgenden Code um den Inhalt der Textfelder in die 1. freie Zeile des aktiven Tabellenblattes zu übernehmen:
Private Sub cmdeingabe_Click()
'Übernimmt Werte und schließt das Formular Projekte

Dim intErsteLeereZeile As Long

intErsteLeereZeile = ActiveSheet.Cells(Rows.Count, 1).End(x1Up).Row + 1
ActiveSheet.Cells(intErsteLeereZeile, 1).Value = Me.txtprio.Value
ActiveSheet.Cells(intErsteLeereZeile, 2).Value = Me.txtprojektname.Value
ActiveSheet.Cells(intErsteLeereZeile, 3).Value = Me.txtverantw.Value
ActiveSheet.Cells(intErsteLeereZeile, 4).Value = Me.txtstart.Value
ActiveSheet.Cells(intErsteLeereZeile, 5).Value = Me.txtende.Value

Unload frmProjekte
End Sub

Aus irgendeinen Grund kommt für: intErsteLeereZeile = ActiveSheet.Cells(Rows.Count, 1).End(x1Up).Row + 1 schon ein Laufzeitfehler. Woran könnte das liegen? Ist eigentlich 1:1 aus einem anderen Excel übernommen und da lief es.

Moin Tiger,

Einfacher Schreibfehler!

intErsteLeereZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
Das hinter dem x ist ein kleines „l“ und keine „1“.

Gruß
Arnold

Hallo.

Ich bin mir eben nicht sicher, was du mit „Maske“ meinst, aber hier meine kurze Meinung zu deinen beiden Ideen:

  1. Mittels eines Userforms kannst du eine „Maske“ einblenden, in der du verschiedene Eingabefelder kreieren kannst. Die Größe kannst du selbst bestimmen und über die Namen der Felder kannst du jeden Inhalt einzeln auslesen, verarbeiten und dann eintragen, woimmer du es möchtest.

  2. Du könntest auch einfach eine Inputbox nutzen und diese dann x-Mal nacheinander aufrufen. Nach dem Eintragen in die Inputbox kann der eingetragene Inhalt in deine Tabelle eingegeben werden und die nächste inputbox aufgerufen werden. Alternativ ginge das auch über 5 Userforms - was aber meiner Meinung nach zu aufwändig und übertrieben wäre.

Userforms haben den Vorteil, dass du Texte als Textfeld hinzufügen kannst, während eine Inputbox lediglich aus einem Text und einem Eingabebereich besteht - variabler wäre die Inputbox.

Soweit erstmal - ich empfehle eher die Variante mit der Userform, auch wenn das Einrichten etwas komplizierter ist (allerdings kannst du hier übersichtlich jede einzelne Abfrage eingeben lassen). Wenn es schnell gehen soll, dann nimm besser die Inputboxen.

Grüße.

Ich stelle dir hier eine nicht ganz perfekte Lösung vor. Perfekte Lösungen sind zu lang für dieses Board.
Meine Einfüll-Felder im Userform sind Textboxes mit folgenden Bezeichnungen:

 TB\_Aufgabe
 TB\_Mitarbeiter
 TB\_Zeitraum

Meine Button heißen:

 CB\_Speichern (der Speichert deine Eingaben)
 CB\_Verwerfen (dieser leert versehentliche Eingaben)

Das müsstest Du jeweils anpassen. (TB_ von Textbox und CB_ von CommandButton)
Und in der Tabelle muss Zeile 1 mit den Überschriften gefüllt sein
Hier nun der Code:

Private Sub CB\_Speichern\_Click()
Dim NoSave As Boolean
Dim LastRow As Long

'Leere Eintragung verhindern
If TB\_Aufgabe = "" Then NoSave = True
If TB\_Mitarbeiter = "" Then NoSave = True
If TB\_Zeitraum = "" Then NoSave = True

If NoSave = False Then
 'erste freie Zeile feststellen
 LastRow = Range("A:A").SpecialCells(xlCellTypeBlanks).Row
 'füllen der Zellen
 Cells(LastRow, 1) = TB\_Aufgabe.Text
 Cells(LastRow, 2) = TB\_Mitarbeiter.Text
 Cells(LastRow, 3) = TB\_Zeitraum.Text


 'Leeren der Textfelder nach speichern,, um Doppel zu verhindern
 TB\_Aufgabe = ""
 TB\_Mitarbeiter = ""
 TB\_Zeitraum = ""
Else
 MsgBox "Es müssen alle Felder ausgefüült werden!"
End If
End Sub

Private Sub CB\_Verwerfen\_Click()
 TB\_Aufgabe = ""
 TB\_Mitarbeiter = ""
 TB\_Zeitraum = ""
End Sub

Gestartet wird das Formular entweder beim Öffnen des Blattes oder mit Makro:

Sub auto\_Open()
UserForm1.Show
End Sub

Sub FormularStarten()
UserForm1.Show
End Sub

Beide Sub stehen in einem Modul zur Mappe (da landen auch aufgezeichnete Makros)

Hi,

also ich sehe kein grundsätzliches Problem alles direkt in die Maske einzugeben und dann automatisiert in die Mappe tragen zu lassen.
Du kannst ja beliebig die Felder Zeilen dynamisch vorgeben.
Bsp
Du gibt’s die GrundDaten ein und weißt welche Zeile das ist.
Dann könntest du die Detaildaten ja in die entsprechenden folgenden Zeilen eintragen lassen…

Gruß
Marco

Lösung 2 ist vermutlich die bessere, da keine vorgegebene Zeilenanzahl gestaltet werden muss, sondern die Anzahl nach Bedarf realisiert wird.

Auch Querprüfungen lassen sich mit Lösung 2 realisieren.

lg
Katharina

Hallo,
ich kann Ihnen leider nicht weiterhelfen.

Mit freundlichen Grüßen

Hallo blacktiger742728,
mit Office2010 kenne ich mich nicht aus.
Gruß Hugo