Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1096to1100
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

List Index

List Index
amintire
Guten Abend,
folgendes Problem bei folgender Beispielmappe:
https://www.herber.de/bbs/user/64111.xls
Wo und wie muss ich den Code umbauen, dass wenn ich eine Person lösche, die 3 Zellen leer werden...
eigentlich funktioniert des, die Zellen werden leer,
allerdings wenn ich eine neue Person hinzufüge, rutschen die anderen hoch und der letzte eingetragene kommt auf die letzte Zeile.
Möchte allerdings, wenn ich eine Person lösche, und eine neue hinzufüge, dass die neue Person den Platz von der alten bekommt.
Hoffe dass man versteht was ich mein.... ;)
Gruß amintire
AW: List Index
30.08.2009 03:32:28
Jens
Hallo Amintire
Das ist vollkommen unnötig und bringt auch nichts.
Denn am Schluss von Deinem Code sortierst Du ja die Datensätze.
Gruß aus dem Sauerland
Jens
AW: List Index
30.08.2009 09:44:37
amintire
Hallo Jens,
wieso soll das unnötig sein und nichts bringen?
Es kommt doch immer drauf an für was man es braucht oder nicht?
Und ich brauch des eben nicht so wie es grad ist sondern anders.
Aber danke für deine Information.
Gruß amintire
AW: List Index
30.08.2009 09:51:13
Harry
Hi,
sortiere die Tabelle, nachdem du einen Namen gelöscht hast.
mfg Harry
keine Sortierung...
30.08.2009 10:20:52
amintire
Hallo Harry,
wo genau lösch ich die Sortierung im Code?
Die Tabelle soll nicht sortiert werden. Und eine neue Person die hinzugefügt wird soll entweder unter die Liste, bzw. bei einer Lücke (leere Zelle) geschrieben werden.
Gruß amintire
Anzeige
AW: keine Sortierung...
30.08.2009 10:23:40
Harry
Hi,
wenn unten, dann musst du halt die erste leere Zelle ermitteln, wenn Lücke, musst du dir den
Listindex der Combobox vorm Löschen merken.
mfg Harry
?
30.08.2009 10:37:06
amintire
Sorry hab keine Ahnung von VBA.
Gruß
AW: Beispiel
30.08.2009 12:42:39
amintire
Bei dem Beispiel werden wenn ich eine Person lösche alle anderen von oben abwärts gestellt.
Bei der gelöschten Person müssten die Zellen leer bleiben, wenn ich aber wieder eine hinzufüge müsste die erste leere Zelle gefüllt werden mit den Daten.
Gruß amintire
Anzeige
Verständnisproblem
30.08.2009 12:48:45
Harry
Hi,
mir fällt kein vernünftiger Grund ein, warum erst eine Lücke erzeugt wird, die dann
mit anderen Daten gefüllt werden soll.
mfg Harry
AW: Verständnisproblem
30.08.2009 12:54:06
amintire
Hallo Harry,
das liegt daran, dass andere Zellen sich mit Formeln auf die Zellen beziehen. Wenn jetzt eine Lücke entsteht, und alle anderen hochrutschen, bezieht sich die Formel auf die falschen Personen.
Daher soll wenn eine Person gelöscht wird, ein neuer dazu kommt - erst die Lücke gefüllt werden, da die neue Person die alte ersetzt. ;)
Hoffentlich jetzt ein bisschen Verständisvoller.
Gruß amintire
AW: Verständnisproblem
30.08.2009 13:54:38
fcs
Hallo amintire,
dann muss du die Prozedur des Übernehmen-Buttons wie folgt anpassen. Da wird geprüft, ob vor der letzten Zelle mit Daten noch eine Leerzelle vorhanden ist.
Gruß
Franz
Private Sub CommandButton2_Click()
Dim xZeile As Long
If TextBox1 = "" Then Exit Sub
If ComboBox1.ListIndex = 0 Then
If [A65536].End(xlUp).Row = [A1].End(xlDown).Row Then
xZeile = [A65536].End(xlUp).Row + 1
Else
If IsEmpty([A2]) Then
xZeile = 2
Else
xZeile = [A1].End(xlDown).Row + 1
End If
End If
Else
xZeile = ComboBox1.ListIndex + 1
End If
Cells(xZeile, 1) = TextBox1
Cells(xZeile, 2) = TextBox2
Cells(xZeile, 3) = TextBox3
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
Columns("A:C").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
UserForm_Initialize
End Sub

Anzeige
welcher code ist fürs sortieren?
30.08.2009 13:58:24
amintire
Hallo Franz,
danke für die Info.
Welchen Code muss ich rausnehmen oder ändern damit die Zeilen ab 2 nicht sortiert werden?
Gruß amintire
AW: welcher code ist fürs sortieren?
30.08.2009 14:08:02
fcs
Hallo admire,
evtl. solltest du deinen Nickname hier in "KnowNothing" ändern statt "admire".
Suche in der Prozedur nach der Zeile mit "Sort". Diese Anweisung in der Prozedur muss du löschen wenn du nicht sortieren willst.
Gruß
Franz
Sorry hatte "amintire" und "admire" verwechselt
30.08.2009 14:09:51
fcs
o.t.
AW: Sorry hatte "amintire" und "admire" verwechselt
30.08.2009 19:09:27
amintire
Hallo Franz,
bist aber nicht nett. Nicht jeder hat Ahnung von Excel und VBA und so.
Und da ich es mir selbst beibringen muss, bleibt eben nichts anderes übrig als alles zu hinterfragen.
Und da ich eben kein Plan von VBA habe, würde ich gerne noch wissen wie ich dass in dem Code änder um anstatt in der Tabelle wo die UserForm geöffnet wird, z.B. in Tabelle 2 die Sachen reingeschrieben werden.
Momentan öffne ich in Tabelle 1 die UserForm. Nach Eingabe der Daten, sind diese in Tabelle 1.
Ich möchte jetzt aber in Tabelle 1 die UserForm öffnen und dass die Daten in tabelle 2 erscheinen.
PS. Würde das ganze funktionieren wenn auch ein Blattschutz vorhanden ist? Wenn nicht auch egal...
Hoffe dass mir jemand ohne gleich rumzumeckern helfen kann bei dem Code.
Vielen Dank.
Gruß amintire
Anzeige
AW: Sorry hatte "amintire" und "admire" verwechselt
31.08.2009 14:50:43
fcs
Hallo amintire,
auch als Anfänger sollte man dann die Code-Beispiele lesen und auch versuchen zu verstehen.
In dem relativ kurzen Code-Beipiel war die folgende Zeile enthalten.
      Columns("A:C").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Da hatte ich dann schon die Vermutung, dass man diese Zeile als die für das Sortieren verantworliche Zeile identifizieren kann - auch als Anfänger.
Zu deiner neuen Frage:
Damit nicht der gesamte Code in deinem Userform angepasst werden muss, muss in der Intialisierungs-Prozedur des Userforms das Blatt aktiviert werden, indas die Daten eingetragen werden sollen.
Für den Reset der Combobox1 hab ich eine eigene Prozedur geschrieben, da diese ja in mehreren Prozeduren erfolgen soll.
Das ist günstiger, als jeweils die Initialisierungsprozedur aufzurufen.
Hier deine Datei angepasst:
https://www.herber.de/bbs/user/64131.xls
Gruß
Franz
Anzeige
zur Ausgangstabelle zurück
01.09.2009 20:26:22
amintire
Hallo Franz,
deine Tabelle ist schon nicht schlecht, nur möchte ich nach der Eintragung wenn ich auf Ok klicke (button wird noch gemacht) zur Ursprungstabelle landen.
In der jetzigen Tabelle schließe ich das UserForm und bin in Tabelle2... soll aber zur Tabelle1 kommen.
(Funktioniert das ganze wenn Tabelle2 ausgeblendet wird per Code also eigentlich gar nicht sichtbar ist?)
Gruß amintire
AW: zur Ausgangstabelle zurück
02.09.2009 00:17:49
fcs
Hallo amintire,
um zum Blatt Tabelle1 zurückzuwechseln muss du die Prozedur des Schließen-Buttons anpassen.
Private Sub CommandButton3_Click()
Unload Me
Worksheets("Tabelle1").Activate
End Sub

Grundsätzlich kann man solche Userform-Eingaben auch für ein ausgeblendetes Blatt mach.
Dann muss du jedoch zu Beginn des Userforms-Codes ein Objektvariable asl Worksheet deklarieren.
Private wksData as Worksheet
In der Initialisierungs-Prozedur des UF muss du dieser Variablen dann das Tabellenblatt zuweisen, in dem die Daten stehen.
Set wksData = Worksheets("Tabelle2")
In allen Prozeduren in denen Cells(x,Y) vorkommt, oder Zellebezüge in der Form [A1] muss du dann zusätzlich das Worksheets-Objekt mit angeben.
Cells(i,2)
wird zu
wksData.Cells(i,2)
Mit With-Anweisungen kannst du das etwas vereinfachen, dann muss vor den Cells(x,y) jeweils ein Punkt gesetzt werden, damit der Betug zum Objekt korrekt ist.
With wksData
TextBox1 = .Cells(ComboBox1.ListIndex + 1, 1)
TextBox2 = .Cells(ComboBox1.ListIndex + 1, 2)
TextBox3 = .Cells(ComboBox1.ListIndex + 1, 3)
End With
Da wäre an deinem Code also so einiges anzupassen.
Gruß
Franz
Anzeige
einfacher ?
02.09.2009 18:54:41
amintire
Hi Franz,
würde dass nicht einfacher gehen wenn ich anstatt Abbrechen - Zurück Button mache und beim draufklicken verweist der mich auf Tabelle 1 ? Anstatt den ganzen Code in einer Prozedur anzupassen.
So in der Art?
Sub zurück()
Sheets("Tabelle1").Select
Range("A1").Select
End Sub

Gruß amintire
Hilfe... Noch eine frage bitte
02.09.2009 19:42:30
amintire
Hallo,
ich versuche grad vergeblich, den ganzen Spaß als zweite UserForm zu basteln, allerdings sollen jetzt nicht in Zeile A:C sondern in den Zeilen D:F die Daten kommen.
Ich hab schon fast alles ausprobiert des anzupassen.
TextBox1 = .Cells(ComboBox1.ListIndex + 5, 1)
TextBox2 = .Cells(ComboBox1.ListIndex + 6, 2)
TextBox3 = .Cells(ComboBox1.ListIndex + 7, 3) dürfte ja stimmen glaube ich
aber wenn ich dann die UserForm starte und eine Person aus der ListIndex rausssuchen möchte zeigt er mir diese von der ersten UserForm.
Kann jemand den Code bzw. mir erklären wo genau ich welche Daten ändern soll?
Gruß amintire
Anzeige
AW: Hilfe... Noch eine frage bitte
03.09.2009 08:29:50
fcs
Hallo amintire,
Kurze Definition:
In Excel sind Spalten die senkrechten, untereinander angeordneten Daten und haben oben die Kennzeichnung mit den Buchstaben (Standardeinstellung).
Zeilen sind die wagerecht nebeneinander angeordneten Daten und links nummeriert.
Im Cells-Objekt steht in den Klammern erst die Zeilen-Nr. und dann nach dem Komma die Spalten-Nr.
Cells(Zeile, Spalte).
Du musst also deinen Code umstellen.
TextBox1 = .Cells(ComboBox1.ListIndex + 1, 4)
TextBox2 = .Cells(ComboBox1.ListIndex + 1, 5)
TextBox3 = .Cells(ComboBox1.ListIndex + 1, 6)
Damit in der Combobox die Daten korrekt eingelesen werden muss du natürlich auch die Initialisierungs-Prozedur bzw. die von mir vorgeschlagen Prozedur ResetCombobox1 entsprechend anpassen, damit die Daten aus den Spalten D bis F eingelesen werden.
Gruß
Franz
Anzeige
Reset bekomm ich nicht hin...
03.09.2009 19:57:24
amintire
Hallo Franz,
soweit ist der Code angepasst, allerdings hapert es bei der Listbox um die Personen zu entfernen.
Das ist der alte code:
Private Sub ResetCombobox1()
Dim aRow, i As Long
Application.EnableEvents = False
ComboBox1.Clear
aRow = [A65536].End(xlUp).Row
ComboBox1.AddItem "neue Person hinzufügen"
For i = 2 To aRow
ComboBox1.AddItem Cells(i, 1) & ", " & Cells(i, 2)
Next i
ComboBox1.ListIndex = 0
Application.EnableEvents = True
End Sub

Mein Versuch war den Code so umzustellen:
Private Sub ResetCombobox1()
Dim aRow, i As Long
Application.EnableEvents = False
ComboBox1.Clear
aRow = [E65536].End(xlUp).Row
ComboBox1.AddItem "neue Person hinzufügen"
For i = 6 To aRow
ComboBox1.AddItem Cells(i, 5) & ", " & Cells(i, 6)
Next i
ComboBox1.ListIndex = 0
Application.EnableEvents = True
End Sub

Leider funktioniert es nicht...
Gruß amintire
Anzeige
endlich ^^
03.09.2009 20:14:13
amintire
Hallo nochmal,
glaube dass ich es jetzt richtig habe, zumindest funktioniert es einwandfrei ;)
For i = 2 To aRow
ComboBox1.AddItem Cells(i, 5) & ", " & Cells(i, 6)
Musste ja nur i,1 auf i,5 und so ändern.
Hat zwar lang gedauert es rauszufinden - aber ich habs ;)
Gruß amintire

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige