PDA

Vollständige Version anzeigen : Selbstgebautes vba Formular in Excel Tabelle einlesen


Porschekiller
05.01.2010, 17:51
Hallo habe ein Problem ich hab eine Tabelle in der unser Verein seine trainerstunden eintragt. Es gibt die spalten Datum Ort teilehmer Trainer und trainerstunden. Ich habe nun mit vba ein Formular erstellt wo es 5 Textboxen und einen Button gibt. Wie kann ich nun wenn ich das Formular ausgefüllt habe und den Button klicke excel dazu zu bringen eine neue Zeile unter die erste zu machen und dort in die richtigen spalten die Sachen aus der userform von vba einzutragen? Vielen dank schon mal im vorraus

jinx
05.01.2010, 18:21
Moin, Porschekiller,

ansatzweise so:

Dim lngFirstFree As Long
Dim lngCounter As Long
lngFirstFree = Cells(Rows.Count, "A").End(xlUp).Row + 1
For lngCounter = 1 To 5
Cells(lngFirstFree, lngCounter).Value = Controls("Textbox" & lngCounter).Value
Controls("Textbox" & lngCounter).Value = vbNullString
Next lngCounter
Wobei ich nicht weiß, wie die Spalten in der Tabelle und die Textboxen auf der UF in Verbindung stehen.

Und: ich würde immer eine zweite Schaltfläche fürs Abbrechen platzieren. ;)

Porschekiller
05.01.2010, 19:02
Ok ehm um die tabelle ma zu beschreiben in A1 steht datum in B1 steht Belegung durch, in C1 steht Anzahl in D1 steht Trainer und zu letzt in e1 steht Arbeitsstunden würde gerne ein Bild Posten bin aber leider nur mit meinem iPhone on dami kann ich hier leider keine Bilder Posten.
Meine Prozedure lautet ja
Sub private controllbutton1()

end sub
da zwischen soll jetzt also deins jinx? Ok... Wird dabei auch automatisch eine neue Zeile eingefügt in der es dann in der tabelle erscheint? Und dann hätte ich noch ne Frage: gibt es eine moglichkeit das der eintrag eingeordnet wird nach seinem Datum? Also das es eine chronologische reihenfolge gibt? Bin leider auf vba nicht so der profi^^

vielen vielen dank schon mal

jinx
05.01.2010, 19:12
Moin, Porschekiller,

die erste Anweisung ermittelt die erste freie Zeile von unten, ohne Ansicht der Tabelle oder der UF verstehe ich das als einfügen (wobei das meiner Meinung nach auch auf etwas schließen lassen könnte, was Du noch nicht beschrieben hast).

Ein probates Mittel wäre das Aufzeichnen der Aktion per Makro-Rekorder - es wird für einen genau festgelegten Bereich die Sort-Methode verwendet:
Sortiert eine Pivot-Tabelle, einen Bereich bzw. den aktuellen Bereich (wenn nur eine Zelle angegeben wird).

Syntax

Ausdruck.Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation, SortMethod, IgnoreControlCharacters, IgnoreDiacritics, IgnoreKashida)

Ausdruck Erforderlich. Ein Ausdruck, der ein Range-Objekt zurückgibt.

Key1 Variant optional. Das erste Sortierfeld, als Text (ein Pivot-Feld oder Bereichsname) oder als Range-Objekt (z.*B. "Abtlg" oder Cells(1, 1)).

Order1 Variant optional. Zulässig ist eine der folgenden XlSortOrder-Konstanten: xlAscending oder xlDescending. Mit xlAscending wird Key1 in aufsteigender Reihenfolge sortiert. Mit xlDescending wird Key1 in absteigender Reihenfolge sortiert. Der Standardwert ist xlAscending.

Key2 Variant optional. Das zweite Sortierfeld, als Text (ein Pivot-Feld oder Bereichsname) oder als Range-Objekt. Falls nicht angegeben, gibt es kein zweites Sortierfeld. Wird beim Sortieren von Pivot-Tabellen nicht angewendet.

Type Variant optional. Gibt an, welche Elemente sortiert werden. Zulässig ist eine der folgenden XlSortType-Konstanten: xlSortValues oder xlSortLabels. Wird nur beim Sortieren von Pivot-Tabellen angewendet.

Order2 Variant optional. Zulässig ist eine der folgenden XlSortOrder-Konstanten: xlAscending oder xlDescending. Verwenden Sie xlAscending, um Key2 in aufsteigender Reihenfolge zu sortieren. Verwenden Sie xlDescending, um Key2 in absteigender Reihenfolge zu sortieren. Der Standardwert ist xlAscending. Wird beim Sortieren von Pivot-Tabellen nicht angewendet.

Key3 Variant optional. Das dritte Sortierfeld, entweder als Text (ein Bereichsname) oder als Range-Objekt. Falls nicht angegeben, gibt es kein drittes Sortierfeld. Wird beim Sortieren von Pivot-Tabellen nicht angewendet.

Order3 Variant optional. Zulässig ist eine der folgenden XlSortOrder-Konstanten: xlAscending oder xlDescending. Verwenden Sie xlAscending, um Key3 in aufsteigender Reihenfolge zu sortieren. Verwenden Sie xlDescending, um Key3 in absteigender Reihenfolge zu sortieren. Der Standardwert ist xlAscending. Wird beim Sortieren von Pivot-Tabellen nicht angewendet.

Header Variant optional. Legt fest, ob die erste Zeile Überschriften enthält. Zulässig ist eine der folgenden XlYesNoGuess-Konstanten: xlYes, xlNo oder xlGuess. Mit xlYes enthält die erste Zeile Überschriften (die nicht sortiert werden). Mit xlNo gibt es keine Überschriften (der gesamte Bereich wird sortiert). Mit xlGuess übernimmt Microsoft Excel die Entscheidung, ob eine Überschrift vorhanden ist und falls vorhanden, wo sie sich befindet. Der Standardwert ist xlNo. Wird beim Sortieren von Pivot-Tabellen nicht angewendet.

OrderCustom Variant optional. Ganzzahliger, bei 1 beginnender Offset für die Liste der benutzerdefinierten Sortierreihenfolgen. Falls nicht angegeben, wird 1 (Standard) verwendet.

MatchCase Variant optional. True, wenn beim Sortieren Groß- und Kleinschreibung berücksichtigt wird. False, wenn Groß- und Kleinschreibung nicht berücksichtigt wird. Wird beim Sortieren von Pivot-Tabellen nicht angewendet.

Orientation Variant optional. Hat das Argument den Wert xlTopToBottom, so wird von oben nach unten sortiert (zeilenweise). Ist das Argument xlLeftToRight, so erfolgt die Sortierung von links nach rechts (spaltenweise).

SortMethod Variant optional. Die Sortiermethode. Zulässig ist eine der folgenden XlSortMethod-Konstanten: xlSyllabary (für eine phonetische Sortierung) oder xlCodePage (für eine Sortierung nach dem Zeichensatz). Der Standardwert ist xlSyllabary.

IgnoreControlCharacters Variant optional. Wird in US/English Microsoft Excel nicht verwendet.

IgnoreDiacritics Variant optional. Wird in US/English Microsoft Excel nicht verwendet.

IgnoreKashida Variant optional. Wird in US/English Microsoft Excel nicht verwendet.
Ab 2002 gibt es zusätzliche Kriterien, Excel2007 kann sowohl diese als auch die neue Sortiermethodik anwenden.

Porschekiller
05.01.2010, 19:25
Ok und wie muss ich des Zitat umsetzen? Ich probier gleich ma aus ob dein 1. Code geht dann sag ich dir bescheid .

Porschekiller
05.01.2010, 20:01
Ok... Jetzt hab ich n Problem... Ich bin bei meinem office 2000 einfach auf Makros und dann vba... Aber wie integrier ich das Programm das ich dann geschrieben hab? *schäm* weil ohne das es in der Tabelle is kann es ja schlecht auf die tabelle zugreifen
bitte helft mich ^^

jinx
06.01.2010, 05:35
Moin, Porschekiller,

ich glaube, ich habe das Problem etwas verkompliziert, indem ich von Formular auf eine UserForm in VBA geschlossen habe, was ich aber mit der letzten Aussage bezweifele. Bei einer Eingabe in eine Tabelle als Formular werden die Angaben aus den Zellen in die andere überführt. Dazu wird dann ein Modul angelegt, eine Sub angelegt und ein etwas anderer Code eingefügt, der die Zellen umschreibt:

Sub Umschreiben()
Dim wsDaten As Worksheet
Dim wsSammler As Worksheet
Dim lngErsteFreie As Long
Dim lngZähler As Long

Set wsDaten = Worksheets("Eingabe")
Set wsSammler = Worksheets("Sammler")

lngErsteFreie = wsSammler.Cells(Rows.Count, "A").End(xlUp).Row + 1
For lngZähler = 1 To 5
wsSammler.Cells(lngErsteFreie, lngZähler).Value = wsDaten.Cells(lngZähler, "B")
Next lngZähler
wsDaten.Range("B1:B5").ClearContents

With wsSammler
.Range("A1").CurrentRegion.Sort _
Key1:=.Range("A2"), _
Order1:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom
End With

Set wsSammler = Nothing
Set wsDaten = Nothing

End Sub
Hier wird davon ausgegangen, dass die Eingaben im Bereich B1 bis B5 gemacht werden, die dann in die Spalten A bis E umgeschrieben werden, Datum in Spalte A, nach der auch sortiert wird.

Bei Anpassungsproblemen solltest Du bitte eine Beispielmappe anhängen, damit die Veränderungen vorgenommen werden können.

Porschekiller
06.01.2010, 07:08
Doch doch von einer userform in vba welche ich über die makro Funktion erstellt habe sollen die daten in eine tabelle eingegeben werden. Um dir mal zu zeigen wie ich das meine Versuch ich mal den Programm Code in Pascal aufzuschreiben weil ich das wenigstens ein bisschen kann:
prozedure button1.click()
begin
sheet1.create.newline;
sheet1.Cell(A2).Text:= userform1.textbox1.Text;//datum
sheet1.Cell(B2).Text:= userform1.textbox2.Text;//Belegung durch
sheet1.Cell(C2).Text:= userform1.textbox3.Text;//Personen
sheet1.Cell(D2).Text:= userform1.textbox4.Text;//Trainer
sheet1.Cell(E2).Text:= userform1.textbox5.Text;//Trainerstunden
sheet1.sortby(A2-a50);
userform1.reset;//die textboxes wieder leeren
end;

so wurde es ungefähr aussehen vielleicht versteht du jetzt ein bisschen besser was ich meine ich hoffe es macht euch nicht zuu viele Umstände
MfG porschekiller

hary
06.01.2010, 08:40
Moin
Im Prinzip genau wie Du es geschrieben hast.
Private Sub CommandButton1_Click()
Worksheets("Tabelle1").Range("A2") = TextBox1 'aus TextBox1 in Tabelle1 A2
TextBox1 = "" 'leeren
End Sub

bei TextBox1 kannst Du auch die Userform zuweisen
UserForm1.Textbox1
gruss hary

Porschekiller
06.01.2010, 13:26
Und wie bringe ich nun das vba formular dazu bei der excel Tabelle enthalten zusein? Weil momentan is des irgendwie noch ein extra Programm und dann findet es logischerweise die Tabelle nicht
edit das Obere hat sich geklärt
hab jetzt folgenden Text
private sub commandbutton1_click()
dim lngfirstfree As Long
lngfirstfree = worksheets("sheet1").cells(rows.Count, "A").End(xlUp).Row + 1
worksheets("sheet1").Range("A2") = textbox1
.Range("B2") = textbox2
.Range("C2") = textbox3
.range("D2") = textbox4
.Range("E2") = Textbox5
end sub



Aber iwie die Daten werden eingefugt.... Aber es wird keine neue Zeile gemacht... Wo liegt mein Fehler? Auch das zum chronologischen sortieren was du geschrieben hattest funktioniert nicht... Ohh man ich verzweifel echt noch...
MfG porschekiller

hary
06.01.2010, 15:29
Hi
nicht verzweifeln. Jeder fing mal an und selbst jetzt klappt's nicht auf Anhieb.
Anbei eine Beispielmappe.
hier der Code.
Private Sub CommandButton1_Click()
Dim lngfirstfree As Long
lngfirstfree = Worksheets("Tabelle1").Cells(Rows.Count, "A").End(xlUp).Row + 1 ' leere Zelle finden
With Worksheets("Tabelle1")
.Cells(lngfirstfree, 1) = TextBox1 'die 1 steht fuer SpalteA
.Cells(lngfirstfree, 2) = TextBox2 'die 2 steht fuer SpalteB
.Cells(lngfirstfree, 3) = TextBox3 ' usw
.Cells(lngfirstfree, 4) = TextBox4
.Cells(lngfirstfree, 5) = TextBox5
End With
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
End Sub
gruss hary
Code kann gekuerzt werden aber eins nach demanderen ;-))))

jinx
06.01.2010, 17:23
Moin, porschekiller,

einfach mein erstes Codebeispiel hinter die Schaltfläche legen und ausprobieren - da die Textboxen keinen geänderten Namen haben und so angeordnet sind wie die Darstellung in den Zellen, hattest Du alles bis auf den Auslöser: Private Sub CommandButton1_Click() vorweg und End Sub hinterher und hinter die UserForm...

Porschekiller
07.01.2010, 22:58
hey also das von hary klappt jetzt auf jeden fall das ja schon mal echt geil....
ehm nur jetzt fehlt mir noch die ordnungsfunktion.. ich probier sie einfach mal hinten dran zu hängen lg porschekiller
ach ja und wie kann ihc die kleinen roten dreiecke umfärben die kommen wenn ich n kommentar hinzufüge