Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1184to1188
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Per UserForm Datensätze mutieren

Per UserForm Datensätze mutieren
Pascal
Guten Tag zusammen
Ich habe eine Excel-Arbeitsmappe mit mehreren Register(Tabellenblättern) auf diesen Tabellenblättern sind verschiedene Datensätze abgelegt. (in Zellen unterteilt)
Nun möchte ich folgendes tun:
Per Userform möchte ich dem User die Möglichkeit geben, aus einer Listbox ein Tabellenblatt anzuwählen (ich lese in die Listbox alle vorhandene Tabellenblätter so ein:
Private Sub UserForm_Initialize()
Dim aRow, i As Long
For Each wks In Worksheets
ComboBox1.AddItem wks.Name
Next
Suchart = xlPart
xOpt = 1
End Sub

Danach soll (am besten wohl auch in Form einer Listbox - Combobox) durch die einzelnen, auf diesem Tabellenblatt vorhandenen Datensätze gescrollt werden können.
Ist dann ein bestimmter Datensatz im zweiten Listenbox-Combobox-Feld selektiert, so soll dieser Datensatz per Klick auf einen Button mutiert werden können. (also wohl am besten ... Per CommandButton den ausgewählten Datensatz in einer weiteren UserForm öffnen und in verschiedene Textfeld aufgeteilt darstellen.
Der user soll nun die Mutation des Datensatzes vornehmen können und dann auf OK - Button diese Mutation in der Datenbank sichern.
Mein Problem:
Wie bewerkstellige ich, dass wenn ich im Cobobox1 - Listenfeld ein Tabellenblatt auswähle, zu diesem gesprungen wird und mir dann im Combobox2 - Listenfeld alle darauf vorhandenen Datensätze angezeigt werden ?
wie müsste da der Code dazu lauten ?
Hoffe, meine Frage sei so einigermassen verständlich
Besten Dank im voraus für die Hilfe !
AW: Per UserForm Datensätze mutieren
15.11.2010 13:56:13
Rudi
Hallo,
Private Sub ListBox1_Click()
Dim wks As Worksheet, lRows As Long, lCols As Long
Set wks = Worksheets(ListBox1.Value)
With wks.Cells(1, 1).CurrentRegion
lRows = .Rows.Count - 1
lCols = .Columns.Count
End With
With ListBox2
.ColumnCount = lCols
.List = wks.Range(wks.Cells(2, 1), wks.Cells(lRows, lCols)).Value
End With
End Sub

Gruß
Rudi
AW: Per UserForm Datensätze mutieren
15.11.2010 14:00:18
Pascal
werds gleich mal probieren und testen
im voraus schon mal HERZLICHEN DANK !
AW: Per UserForm Datensätze mutieren
15.11.2010 14:08:27
Pascal
Hmmmm... das Ganze will ned funzen :-(
Dh. auf meiner UserForm2 hab ich nun ...
- ein Listbox1-Feld
zwei Comboboxen
und folgenden Code:
Private Sub ComboBox2_Change()
Registerblatt = UserForm2.ComboBox1.Value
Worksheets(Registerblatt).Activate
Application.EnableEvents = False
ComboBox2.Clear
aRow = [C65536].End(xlUp).Row
ComboBox2.AddItem "Datensätze"
For i = 2 To aRow
ComboBox2.AddItem Cells(i, 3) & ", " & Cells(i, 5)
Next i
ComboBox2.ListIndex = 0
Application.EnableEvents = True
End Sub

Private Sub ListBox1_Click()
Dim wks As Worksheet, lRows As Long, lCols As Long
Set wks = Worksheets(ListBox1.Value)
With wks.Cells(1, 1).CurrentRegion
lRows = .Rows.Count - 1
lCols = .Columns.Count
End With
With ListBox2
.ColumnCount = lCols
.List = wks.Range(wks.Cells(2, 1), wks.Cells(lRows, lCols)).Value
End With
End Sub

Private Sub UserForm_Initialize()
Dim aRow, i As Long
For Each wks In Worksheets
ComboBox1.AddItem wks.Name
Next
Suchart = xlPart
xOpt = 1
End Sub

Wenn ich das Ganze Starte, so wird mir Userform2 angezeigt und im ComboBox1 - Feld kann ich wirklich durch alle Registerblätter wählen.
Aber ... wenn ich hier einen Eintrag aus der Liste auswähle so wird dieses Tabellen(Registerblatt) in der Excel-Tabelle nicht selektiert.
Zudem:
Egal welches Registerblatt ich aus meiner ComboBox1 - Liste auswähle...
die dort drauf vorhandenen Datensätze werden mir nirgends dargestellt.
was mach ich falsch ?
Anzeige
AW: Per UserForm Datensätze mutieren
15.11.2010 14:22:22
Pascal
Sorry !
Fehlalarm !
Natürlich musste ich auf meiner UserForm2 die Comboboxes durch Listboxen ersetzen und schon läuft Rudis Code einwandfrei.
Nun muss ich einfach noch den Code um eine Möglichkeit erweitern, dass nicht bloss die Datensätze mit dem Zelleninhalt von der A-Spalte, sondern über die ganze Spaltenbreite angezeigt werden im Listenbox2
Zudem:
wenn ich in Listbox2 also einen Datensatz anklicke, so will ich diesen ja mutieren können.
Evt den Code so erweitern, dass der Ganze Datensatz (dieser erstreckt sich von der Spalte A bis und mit Spalte i )
in einzelnen Textfelder aufgeteilt dargestellt wird.
(also jede Spalte in ein Textfeld ?9
Und ... ich möchte ja, dass wenn ich dann in diesen Textfeldern etwas mutiere, dieses dann auch gleich in der Datenbank drin beim Datensatz entsprechend mutiert wird.
Anzeige
AW: Per UserForm Datensätze mutieren
15.11.2010 14:38:06
Rudi
Hallo,
Nun muss ich einfach noch den Code um eine Möglichkeit erweitern, dass nicht bloss die Datensätze mit dem Zelleninhalt von der A-Spalte, sondern über die ganze Spaltenbreite angezeigt werden im Listenbox2

Wenn du eine richtige Liste hast, macht mein Code das.
Gruß
Rudi
AW: Per UserForm Datensätze mutieren
15.11.2010 14:51:44
Pascal
... in Excel drin ist meine Liste so aufgebaut, dass der Datensatz in Spalte A in der zweiten Zeile beginnt (also A2)
dann erstreckt sich der Datensatz bis und mit der Spalte i2
aber ... wenn ich den Code starte, so wird mir immer nur der Inhalt der Zelle A2, A3, A4 ... dargestellt in der Listbox2
Anzeige
AW: Per UserForm Datensätze mutieren
15.11.2010 14:54:09
Pascal
und etwas hab ich vergessen zu erwähnen...
die Spalten B; D; F und H sind immer leer.
diese Spalten dienen der schönen Tabellenformatierung
schöne Tabellenformatierung
15.11.2010 16:24:42
Rudi
Hallo,
einem Excel-Profi sollten die Grundsätze von Listen bekannt sein.
Siehe z.B. http://www.online-excel.de/excel/singsel.php?f=52
Mit so einem Mist beschäftige ich mich nicht weiter.
Gruß
Rudi
AW: Per UserForm Datensätze mutieren
15.11.2010 16:45:12
Christian
Hallo Sascha,
Datensätze werden nicht mutiert...
Daten auf mehrere Tabellen verteilen macht nur Sinn, wenn die Daten normalisiert sind wie bei relationalen Datenbanken. Mit guten VBA Kenntnissen kann man das mit Excel auch in kleinem Umpfang realisieren.
Die Tabellen sind dabei in keiner Weise formatiert.
Wenn du jetzt also sagst, das zwecks "der schönen Tabellenformatierung" bestimmte Spalten leer sind, vermute ich noch viel schlimmeres wie z.Bsp. verbundene Zellen o.ä.
Tipps:
- erzwinge Varialendeklaration via "Option Explicit".
- beschäftige dich erst mal intensiv mit den Grundlagen.
- versuche nicht irgendwelche kopierten Codes in deinen einzubauen, wenn du nicht weist, was da passiert.
- gib den Controls und den Variablen einen sprechenden Namen entsprechend der VB Notation.
- und last but not least - beschäftige dich intensiv mit Datenstrukturen.
"schöne Formatierung" kann man nach 1 Woche, Excelprofi ist man vielleicht nach 10 Jahren.
Gruß
Christian
Anzeige
AW: Per UserForm Datensätze mutieren
15.11.2010 18:16:34
Pascal
Danke für die Hinweise und bisherige Hilfe.
Mittlerweilen läuft mein Makro eigentlich zu meiner vollsten zufriedenheit :-)
(hab selber noch das eine oder andre rausgefunden und ausgetüftelt)
doch .... warum wird mein folgender Code beim öffnen der Arbeitsmappe nicht ausgeführt ?
ich möchte doch bloss, dass gleich bem öffnen der Mappe auch die Userform mitgestartet und angezeigt wird.
Private Sub Workbook_Open()
UserForm1.Show
End Sub
Dieser code steht in Modul1
Userform starten
15.11.2010 18:22:09
Christian
Hallo Pascal,
der Code des Workbook_Open Ereignisses muss in das Klassenmodul des Workbooks.
Gruß
Christian
Anzeige
AW: Userform starten
16.11.2010 10:48:04
Pascal
ES HAT GEKLAPPT !!!!
HERZLICHEN DANK ALLEN FÜR DIE HILFE !!!!
In solch "exotischen" Fällen geht's wirklich...
15.11.2010 18:14:39
Luc:-?
nicht ohne BspDatei, Pascal!
Allerdings ist auch nach einem solchen Upload in diesem speziellen Fall eine Hilfe wohl eher nicht garantiert… ;->
Gruß Luc :-?

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige