Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1488to1492
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
Combobox aktualisieren
24.04.2016 02:10:57
Gisela
Hallo Gemeinde,
ich habe eine Combobox angelegt:
Private Sub ComboBox22_Change()
End Sub

Diese wird mit Werten aus den Zellen CT1:CT15 gefüttert -
u. a. auch die Anzahl der eingegebenen Datensätze.
Meistens stehen diese im Vordergrund. Wenn ich einen neuen Datensatz anlege, muss ich die Combobox erst anklicken und auf den entsprechenden Eintrag um den Wert auf +1 zu setzen/zu aktualisieren. Wie kann ich dies automatisch veranlassen?
Beste Grüsse
Gisela

28
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Combobox aktualisieren
24.04.2016 10:09:26
Beverly
Hi Gisela,
nach diesem Prinzip (ComboBox im Tabellenblatt):
Private Sub ComboBox1_GotFocus()
ComboBox1.Clear
ComboBox1.ListFillRange = "A1:A10"
End Sub
oder diesem (ComboBox auf UserForm):
Private Sub ComboBox1_Enter()
ComboBox1.Clear
ComboBox1.RowSource = "A1:A10"
End Sub


AW: Combobox aktualisieren
24.04.2016 14:58:09
Gisela
Hallo Karin,
vielen Dank für Deine Antwort!
Wenn ich meine Combobox22 (im Tabellenblatt) folgendermmassen adaptiere:
Private Sub ComboBox22_Change()
ComboBox22.Clear
ComboBox22.ListFillRange = "CT1:CT15"
End Sub

erscheint ein nicht näher definierter Laufzeitfehler, wobei die Zeile (Aufruf des debug-Modus)
ComboBox22.Clear
gelb hinterlegt ist.
Beste Grüsse
Gisela

Anzeige
AW: Combobox aktualisieren
24.04.2016 16:09:09
Werner
Hallo Gisela,
du verwendest das falsche Ereignis deiner ComboBox.
Vorschlag von Karin benutzt das
ComboBox_GotFocus()
bzw. das
ComboBox_Enter()
Ereignis, du aber das
ComboBox_Change()
Ereignis.
Gruß Werner

AW: Combobox aktualisieren
24.04.2016 18:37:45
Beverly
Hi Gisela,
das ist auch logisch, denn beim Ändern (Change) der ComboBox kannst du ihr nicht die Datenquelle entfernen (.Clear), denn sie benötigst ja die Datenquelle, um daraus etwas auszuwählen. Vergleiche also mal deinen Code mit meinem ganz genau.


Anzeige
AW: Combobox aktualisieren
24.04.2016 23:31:42
Gisela
Hallo Karin, hallo Werner,
Ihr habt natürlich recht.
Wenn ich via (NICHT GotFocus)
Private Sub ComboBox22_GetFocus()
ComboBox22.Clear
ComboBox22.ListFillRange = "CT1:CT15"
End Sub

die ComboBox bestücke, ist das Ergebnis das Gleiche wie bei:
Private Sub ComboBox22_Change()
End Sub
Die Werte der Liste IN der ComboBox sind aktuell, aber der 1 von den 15 Werten, der ANGEZEIGT WIRD MUSS durch den Scrollpfeil und das Auswählen des IN der Liste stehenden aktuellen Wertes aktualisiert werden.
Bsp.:
ANZEIGE:
871 Datensätze
In der Liste
stehen
871 Datensätze
Ich füge einen Datensatz ein
ANZEIGE:
871 Datensätze
In der Liste stehen
872 Datensätze
Beste Grüsse
Gisela

Anzeige
AW: Combobox aktualisieren
25.04.2016 07:54:01
Beverly
Hi Gisela,
meinst du, dass du von Hand in die ComboBox einen neuen Wert eintragen willst und dieser dann in die Daten aufgenommen werden soll? Falls du etwas anderes meinst - sorry, ich verstehe nur Bahnhof.


AW: Combobox aktualisieren
26.04.2016 01:44:56
Gisela
Hallo Karin,
meine Combobox besteht aus einer Liste mit 15 Einträgen, die durch den scroll down-Pfeil aufgerufen werden kann, Man kann einen dieser Einträge dann auswählen, nur dieser wird dauerhaft angezeigt:
Userbild
Während die Werte in der Liste nach Neueeingaben immer aktualisiert werden, wird dieser NICHT automatisch aktualisiert.
Beste Grüsse
Gisela

Anzeige
AW: Combobox aktualisieren
26.04.2016 08:19:21
Beverly
Hi Gisela,
du änderst also den Zellinhalt im Tabellenblatt und möchtest diese Änderung in der ComboBox sofort ausgeben?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngBereich As Range
Dim lngIndex As Long
Set rngBereich = Range(ActiveSheet.ComboBox1.ListFillRange)
If Not Intersect(Target, rngBereich) Is Nothing Then
With ActiveSheet.ComboBox1
lngIndex = .ListIndex
.ListIndex = -1
.Value = rngBereich.Cells(lngIndex + 1).Value
End With
End If
Set rngBereich = Nothing
End Sub


Anzeige
AW: Combobox aktualisieren
26.04.2016 13:00:26
Gisela
Hallo Karin,
nein es funktioniert leider nicht - ich habe ComboBox1 durch ComboBox22 ersetzt und sonst alles so belassen, wie Du es mir gesendet hast und als Objekt in Tabellenblatt1 eingefügt (wo ja auch meine Combox22 liegt). Habe ich etwas falsch gemacht oder reden wir aneinander vorbei?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngBereich As Range
Dim lngIndex As Long
Set rngBereich = Range(ActiveSheet.ComboBox22.ListFillRange)
If Not Intersect(Target, rngBereich) Is Nothing Then
With ActiveSheet.ComboBox22
lngIndex = .ListIndex
.ListIndex = -1
.Value = rngBereich.Cells(lngIndex + 1).Value
End With
End If
Set rngBereich = Nothing
End Sub
Beste Grüsse
Gisela

Anzeige
AW: Combobox aktualisieren
26.04.2016 13:53:15
Beverly
Hi Gisela,
da du den Code 1:1 (mit Änderung des Namen der ComboBox) übernommen hast, kann ich nicht sehen, weshalb es nicht funktionieren sollte. Da musst du schon mal eine Beispielmappe hochladen, in der es nicht funktioniert.


AW: Combobox aktualisieren
26.04.2016 16:20:05
Gisela
Hallo Karin,
vielen Dank für Deine Bemühungen, aber ich denke, dass es zuviel Aufwand bedeuten würde, da die Beispielsmappe richtog gross würde und es ja nur eine minimale Verbesserung darstellen würde.
Beste Grüsse
Gisela

AW: Combobox aktualisieren
26.04.2016 18:58:44
Beverly
Hi Gisela,
du musst ja nicht die komplette Mappe hochladen sondern es reicht eine Kopie mit den für das Problem relevanten Inhalten.


Anzeige
AW: Combobox aktualisieren
27.04.2016 02:44:11
Gisela
Hallo Karin,
xlsm ist zu gross, das ursprgl xlsb wurde zum upload nicht akzeptiert. Alles recht umfangreich, aber alles hängt zusammen, so dass ich nur die Zahl der Datensätze drastisch reduzieren konnte.
Was nun?
Beste Grüsse
Gisela

AW: Combobox aktualisieren
27.04.2016 07:46:03
Beverly
Hi Gisela,
hilft vielleicht wenn du die zippst? Andernfalls kannst du sie auch an meine Mailadresse schicken.


AW: Combobox aktualisieren
27.04.2016 10:21:54
Gisela
Hallo Karin,
ist soeben an Beverly_Forums@web.de geschehen.
Beste Grüsse
Gisela

AW: Combobox aktualisieren
27.04.2016 11:13:26
Beverly
Hi Gisela,
das "Problem" in deiner Mappe ist, dass sich ListFillRange der ComboBox auf einen Zellbereich bezieht, deren Inhalte sich aus Formeln ergeben und nicht durch direkte Eingabe erzeugt werden - aus diesem Grund kann der Code so nicht funktionieren, weil das Change-Ereignis dadurch nicht ausgelöst wird. Man muss also nicht die Zellen des ListFillRange-Bereichs überwachen sondern die Zellen, aus denen sich die Formeln ihre Werte holen:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngBereich As Range
Dim lngIndex As Long
Set rngBereich = Union(Range("E19:E1032"), Range("K19:K10332"), _
Range("M2:N4"), Range("M10:M11"), Range("CU9:CU14"))
If Not Intersect(Target, rngBereich) Is Nothing Then
With ActiveSheet.ComboBox22
lngIndex = .ListIndex
.ListIndex = -1
.Value = Range(.ListFillRange).Cells(lngIndex + 1).Value
End With
End If
Set rngBereich = Nothing
End Sub
Wenn also Änderungen in diesen Zellen erfolgen, ändern sich (je nach Änderung des Formeergebnisses) auch die Inhalte der Zellen CT1:CT15 und damit die Inhalte der ComboBox.
Ich hoffe, ich habe alle Zellen im Code berücksichtigt, aus denen sich die Inhalte in CT1:CT15 ermitteln - andernfalls müsstest du das entspechend ergänzen.


Anzeige
AW: Combobox aktualisieren
27.04.2016 21:45:08
Gisela
Hallo Karin,
super, funktioniert jetzt einwandfrei, vielen Dank!
Noch eine Frage: die Combobox links (mit Viererblöcke etc.) daneben soll auch automatisch geupdatet werden, ich habe jetzt versucht in die UNION RANGE noch die Spalte N zu integrieren, da diese die BLÖCKE auswertet, also:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngBereich As Range
Dim lngIndex As Long
Set rngBereich = Union(Range("N19:N10332"), Range("E19:E10332"), Range("K19:K10332"), _
Range("M2:N4"), Range("M10:M11"), Range("CU9:CU14"))
If Not Intersect(Target, rngBereich) Is Nothing Then
With ActiveSheet.ComboBox22
lngIndex = .ListIndex
.ListIndex = -1
.Value = Range(.ListFillRange).Cells(lngIndex + 1).Value
End With
End If
Set rngBereich = Nothing
End Sub
Jedoch lassen sich die Blöcke nicht automatisch updaten, was muss ich noch ergänzen?
Beste Grüsse
Gisela

Anzeige
AW: Combobox aktualisieren
27.04.2016 22:49:35
Beverly
Hi Gisela,
du musst im Code unterscheiden, ob es sich um den Block N19:N10251 oder um die anderen Blöcke handelt, denn auf den ersten Block bezieht sich ComboBox21 und auf die restlichen ComboBox22:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngBereich As Range
Dim lngIndex As Long
Set rngBereich = Union(Range("N19:N10251"), Range("E19:E1032"), _
Range("K19:K10332"), Range("M2:N4"), Range("M10:M11"), _
Range("CU9:CU14"))
' Gesamtbereich für ComboBox21 und Combobox22
If Not Intersect(Target, rngBereich) Is Nothing Then
' Teilbereich für ComboBox21
If Not Intersect(Target, Range("N19:N10251")) Is Nothing Then
With ActiveSheet.ComboBox21
lngIndex = .ListIndex
.ListIndex = -1
.Value = Range(.ListFillRange).Cells(lngIndex + 1).Value
End With
' restliche Teilbereiche für ComboBox22
Else
With ActiveSheet.ComboBox22
lngIndex = .ListIndex
.ListIndex = -1
.Value = Range(.ListFillRange).Cells(lngIndex + 1).Value
End With
End If
End If
Set rngBereich = Nothing
End Sub


AW: Combobox aktualisieren
28.04.2016 10:54:43
Gisela
Hallo Karin,
ich habe jetzt Deine alte Private Sub mit der neuen ersetzt. Jetzt funktioniert allerdings nur noch die automatische Aktualisierung der linke Combox, die rechte allerdings nicht mehr.
Beste Grüsse
Gisela

AW: Combobox aktualisieren
28.04.2016 12:26:29
Beverly
Hi Gisela,
das kann ich nicht nachvollziehen - bei mir werden beide ComboBoxen aktualisiert. Beispiel:
- Auswahl ComboBox21 ist "2 Viererblöcken", ich trage in Spalte N ein "1Viererblock"; ComboBox21 zeigt nun "3 Viererblöcke"
- Auswahl ComboBox22 ist "9 Belege insgesamt", ich trage in Spalte E ein neues Datum ein; ComboBox22 zeigt nun "10 Belege insgesamt"


AW: Combobox aktualisieren
28.04.2016 21:29:53
Gisela
Hallo Karin,
wenn ich in Spalte E ein Datum eintrage, kommt ein anwendungs- oder objektdefinierter Fehler 1004 und die Codezeile
.Value = Range(.ListFillRange).Cells(lngIndex + 1).Value
ist gelb hinterlegt.
Zuvor hatte ich nur probiert, den Datensatz miT/ohne Viererblock zu duplizieren und dann die neuen aktualisierten Werte abgerufen (ich habe allerdings 8800 Datensätze in der Datenbank, das ist der einzige Unterschied zu der Dir übermittelten...).
Das Update der Belegezahl funktioniert nach wie vor nicht (ich dupliziere mittels STRG-Q den Datensatz und ändere dann diesen doppelten Datensatz...).
Bei der ursprgl. Version funktioniert alles einwandfrei bei Combobox22.
Beste Grüsse
Gisela

AW: Combobox aktualisieren
29.04.2016 08:26:52
Beverly
Hi Gisela,
Excel reagiert schon manchmal seltsam. Ich habe jetzt mehrfach etwas in Spalte E eingegeben: ab und zu tritt dieser Fehler auf, aber nicht jedesmal - wenn ich Excel schließe tritt er nicht mehr auf, nach einiger Zeit aber erneut. Dem kann man Abhilfe schaffen, indem man statt .ListFillRange eine Variable einsetzt und .ListFillRange darauf schreibt (strBereich):
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngBereich As Range
Dim lngIndex As Long
Dim strBereich As String
Set rngBereich = Union(Range("N19:N10251"), Range("E19:E1032"), _
Range("K19:K10332"), Range("M2:N4"), Range("M10:M11"), _
Range("CU9:CU14"))
' Gesamtbereich für ComboBox21 und Combobox22
If Not Intersect(Target, rngBereich) Is Nothing Then
Application.Calculate
DoEvents
' Teilbereich für ComboBox21
If Not Intersect(Target, Range("N19:N10251")) Is Nothing Then
With ActiveSheet.ComboBox21
lngIndex = .ListIndex
.ListIndex = -1
strBereich = .ListFillRange
.Value = Range(strBereich).Cells(lngIndex + 1).Value
End With
' restliche Teilbereiche für ComboBox22
Else
With ActiveSheet.ComboBox22
lngIndex = .ListIndex
.ListIndex = -1
strBereich = .ListFillRange
.Value = Range(strBereich).Cells(lngIndex + 1).Value
End With
End If
End If
Set rngBereich = Nothing
End Sub
Möglicherweise liegt es an der großen Anzahl an Datensätzen, dass bei dir nicht aktualisiert wird, weil die Neuberechnung der Formeln noch nicht abgeschlossen ist. Ich habe mal zu Beginn noch eine Neuberechnung angeschoben - vielleicht hilft das ja.


AW: Combobox aktualisieren
29.04.2016 10:49:40
Gisela
Hallo Karin,
gleicher Effekt, gleicher Fehler (dieser tritt bei mir immer auf)...
Ich habe Dir noch einmal die Datenbank geschickt, so wie ich den Fehler ursprgl. auch an der verkleinerten Datenbank reproduziert habe. Den neuen Code habe ich eingefügt und anschliessend ausprobiert, das Ergebnis ist dasselbe.
Ich denke einfach, dass excel bei der automatischen Aktualisierung von 2 Comboboxen "verrückt spielt".
Beste Grüsse
Gisela
PS. Es ist mir auch schon sehr geholfen, dass die Anzahl der Belege immer korrekt automatisch - dank Deiner Hilfe - berücksichtigt wird, da dies ja dauernd geschieht. Die Blöcke kommen nur sporadisch vor und so kann man dann diese ab und an sporadisch manuell aktualisieren - ist also kein Beinbruch...

AW: Combobox aktualisieren
29.04.2016 12:48:18
Beverly
Hi Gisela,
das Problem hängt mit dem Makro zusammen, welches du der Tastenkombination Str+Q zugewisen hast - mir war nicht bekannt, dass du solch ein Makro benutzt. Durch das Einfügen einer Zeile und Kopieren der darüberliegenden Zeile wird das Change-Ereignis ausgelöst, die Formeln neu brechnet und der ComboBox dadurch der ListIndex -1 zugewiesen. Im Code löst das in diesem Teil Range(strBereich).Cells(lngIndex + 1).Value einen Fehler aus, weil es .Cells(0) natürlich nicht gibt. Man müsste also bereits hier den ListIndex auslesen, um im Change-Ereignis unterschieden zu können, ob die Daten durch das Makro oder direkte Eingabe erstellt wurden:
Option Explicit
Public lngIndex21 As Long   ' Listindex ComboBox21
Public lngIndex22 As Long   ' Listindex ComboBox22
Sub Zeileeinf()
' Zeilen_einfügen Makro
' Makro am 16.09.2010 von Privat aufgezeichnet
If Selection.Areas.Count > 1 Then
MsgBox ("Bitte nicht mehrere Bereiche auswählen!")
Exit Sub
End If
Application.ScreenUpdating = False
' aktuelle Auswahl der ComboBoxen auf Variablen schreiben
lngIndex21 = ActiveSheet.ComboBox21.ListIndex
lngIndex22 = ActiveSheet.ComboBox22.ListIndex
Selection.EntireRow.Insert '    blnZeilenEinfuegen = False
' ACHTUNG: Das With darf nicht 1 drüber, da sich durch das Insert die Selection ändert
With Selection.EntireRow
.Offset(-1, 0).Resize(1).Copy
.PasteSpecial Paste:=xlPasteFormulas
' Wenn in der Zeile unter den eingefügten Zeilen eine Formel in
' Spalte B steht, dann muss die korrigiert werden
If .Resize(1, 1).Offset(.Rows.Count, 1).HasFormula Then
.Resize(1, 1).Offset(.Rows.Count, 1).FormulaR1C1 = _
.Resize(1, 1).Offset(-1, 1).FormulaR1C1
End If
End With
Application.ScreenUpdating = True
End Sub

Und im Change-Ereignis kann dann wie folgt darauf zugegriffen werden:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngBereich As Range
Set rngBereich = Union(Range("E19:E1032"), _
Range("K19:K10332"), Range("M2:N4"), Range("M10:M11"), _
Range("CU9:CU14"))
' Bereich für ComboBox21
If Not Intersect(Target, rngBereich) Is Nothing Then
Application.Calculate
DoEvents
With ActiveSheet.ComboBox22
If lngIndex22  -1 Then
lngIndex = .ListIndex
Else
lngIndex = lngIndex22
End If
.ListIndex = lngIndex
End With
End If
' Bereich für ComboBox21
If Not Intersect(Target, Range("N19:N10251")) Is Nothing Then
Application.Calculate
DoEvents
With ActiveSheet.ComboBox21
If lngIndex21  -1 Then
lngIndex = .ListIndex
Else
lngIndex = lngIndex21
End If
.ListIndex = lngIndex
End With
End If
Set rngBereich = Nothing
End Sub

Ich habe das in deiner Mappe jetzt mehrfach getestet - beide ComboBoxen werden aktualisiert.


AW: Combobox aktualisieren
29.04.2016 21:26:57
Gisela
Hallo Karin,
die gleichzeitige Aktualisierung beider comboxes funktioniert jetzt einwandfrei.
Jedoch (habe jetzt lange getestet):
bei
Sub SeinsbisSzehn()
'
' DetailsAnmerkungen Makro
'
'
Rows("1:15").Select
Selection.Copy
Sheets("Tabelle2").Select
Range("A1").Select
ActiveSheet.Paste
...
wird die fett markierte Zeile gelb hinterlegt und ein Laufzeitfehler 1004 angezeigt. Ich HATTE die Befürchtung, dass der Eingriff doch Auswirkungen auf sehr viele Makros hat:
der hier gezeigte kopiert im ersten Schritt alle 15 ersten Zeilen der 1. Tabelle, um sie dann in Tabellenblatt 2... einzufügen etc. (die gleiche Vorgehensweise ist auch bei zig-anderen Markos so implementiert...)
Paradox ist, dass der gleiche Fehler eigentlich auch bei den anderen Makros aus der Listbox auftreten müsste, es aber nicht tut. Und: er tritt dann nicht mehr auf, wenn ich ZUERST einen der anderen Makros aus dieser listbox aufrufe und dann erst SeinsbisSzehn.
Der Fehler tritt bei der ersten Version (nur mit der Combobox23) überhaupt nicht auf.
Ich habe jetzt drei verschiedene Versionen der Datei und unterziehe alle 3 umfangreichen Tests der gleichen Art.
Beste Grüsse
Gisela

AW: Combobox aktualisieren
30.04.2016 08:06:36
Beverly
Hi Gisela,
auf Select/Activate kann man in 99% aller Fälle verzichten, denn dadurch wird der Codeablauf wesentlich verlangsamt - das sollte ausreichen:
    Rows("1:15").Copy Worksheets("Tabelle2").Range("A1")
Application.CutCopyMode = False


AW: Combobox aktualisieren
01.05.2016 03:39:55
Gisela
Liebe Karin,
ich habe jetzt alles auf Herz und Nieren getestet und bin begeistert - auch alle selection copy Geschichten habe ich abgeändert (eindeutig schneller) - es flutscht, alle Einträge beider comboboxen werden stets aktualisiert und es gab keine Fehlermeldungen etc. mehr.
Ncohmals vielen, vielen lieben Dank für Deine Bemühungen und Hartnäckigkeit.
Allerbeste Grüsse
Gisela

AW: Combobox aktualisieren
24.04.2016 23:33:03
Gisela
Hallo Karin, hallo Werner,
Ihr habt natürlich recht.
Wenn ich via (NICHT GotFocus)
Private Sub ComboBox22_GetFocus()
ComboBox22.Clear
ComboBox22.ListFillRange = "CT1:CT15"
End Sub

die ComboBox bestücke, ist das Ergebnis das Gleiche wie bei:
Private Sub ComboBox22_Change()
End Sub
Die Werte der Liste IN der ComboBox sind aktuell, aber der 1 von den 15 Werten, der ANGEZEIGT WIRD MUSS durch den Scrollpfeil und das Auswählen des IN der Liste stehenden aktuellen Wertes aktualisiert werden.
Bsp.:
ANZEIGE:
871 Datensätze
In der Liste
stehen
871 Datensätze
Ich füge einen Datensatz ein
ANZEIGE:
871 Datensätze
In der Liste stehen
872 Datensätze
Beste Grüsse
Gisela
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige