Nach Einfügen aus Listbox plötzlich mehrere Zellen selektiert.
#1
PHP-Code:
Sub ListBoxWertEinfuegen()
  
Dim Gewählte_Zelle As Range
  Set Gewählte_Zelle 
ActiveCell
    Gewählte_Zelle
.Value UserForm1.ListBox1.Value
    UserForm1
.Hide
    ActiveCell
.Select
End Sub 

Der Wert aus der Listbox wird korrekt in die Zelle übergeben.
Aber es wird danach ein ganzer Bereich selektiert.
So, als ob ich einen Rahmen aufziehe, der mehrere Zellen selektiert.

Weiß jemand woran das liegen könnte?

Vielen Dank für Hinweise.
Gruß Achim
Antworten Top
#2
Hallo Achim,
 
Das Value einer Listbox ist der komplette Inhalt dieser Listbox --> also in deinem Fall ein 2 dimensionales Array. 
 
Es wird also der gesamte Inhalt dieser Listbox ab der selektierten Zelle in die Tabelle geschrieben.

Du willst doch sicherlich nur eine oder via multiselect mehrere ausgewähte Zeilen der Listbox in die Tabelle deiner Wahl schreiben - oder?
 
Gruß Uwe
Antworten Top
#3
Hallo Uwe,

die Listbox hat nur eine Spalte.
Ja, es soll nur dieser eine Wert in die Zelle geschrieben werden.

ich habe jetzt die Listbox initialisiert.
PHP-Code:
Private Sub UserForm_Initialize()
  ListBox1.BoundColumn 1
  ListBox1
.ColumnCount 1
  ListBox1
.RowSource "Bezeichnung"
End Sub 

Jetzt wird nach dem Einfügen nur noch die aktive Zeile selektiert.
Immerhin schon mal weniger.

Aber immer noch nicht so wie es sein soll.
Antworten Top
#4
Hallo Achim,
 
lade mal die Datei anonymisiert also internettauglich hoch und beschreibe wie und unter welcher Bedingung der selektierte Datensatz wohin geschrieben werden soll.
 
Gruß Uwe
Antworten Top
#5
Kein Problem.

Hier ist sie.


Angehängte Dateien
.xlsm   Kassenbuch.xlsm (Größe: 28,68 KB / Downloads: 7)
Antworten Top
#6
Du möchtest denke ich mal in eine neue Zeile im Blatt des aktuellen Monates schreiben.
 
Der Aufbau der vorhandenen Datensätze lässt folgende Fragen entstehen:
Wie entsteht die Belegnummer und wo kommt der Preis her.
 
Besser wäre es ein paar Textboxen anzulegen und deren Inhalt als kompletter Datensatz mitzugeben.
 
Gruß Uwe
Antworten Top
#7
Hallöchen,

also, letzte Anweisung im Makro war

ActiveCell.Select

ActiveCell ist aber immer nur eine Zelle im selektierten Bereich, also dürfte im Anschluss auch nur eine Zelle gewählt sein. Entsprechend ist die Frage, ob

- diese Anweisung nicht ausgeführt wird
--> kann man mit schrittweiser Ausführung prüfen
--> kann man mit einer folgenden MsgBox ActiveCell.Address & vbtab & Selection.Address prüfen

- ob danach eventuell noch ein Makro wirkt, welches einen größeren Bereich selektiert

- ...


Value ist übrigens nicht der gesamte Inhalt sondern der gewählte Eintrag. Funktioniert so auch nur bei SingleSelect. Bei MultiSelect ist das immer "Null" Sad
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#8
ich habe mal die Texboxen eingebaut und den Code angepasst, dass an Hand des Monats der Datensatz aus Listbox aktuelles Datum und Textboxen passend übergeben wird.
 
Noch eine kleine Erklärung zum Thema Listbox.Value (da hatte ich unselektiert vergessen zu schreiben). Wenn nichts selektiert ist wird der komplette Listboxinhalt ausgegeben. Wenn selektiert wurde denn entsprechend der Einstellung die Spalte 0 die selektierte Zelle.

.xlsm   Kassenbuch.xlsm (Größe: 33,55 KB / Downloads: 3)
Es ist natürlich noch keinerlei Fehlerbehandlung drin.

Gruß Uwe
Antworten Top
#9
Hi
sieht für mich wie ein Bug aus.
der Doppelklick auf die Listbox wirkt nach dem Schließen der Userform noch auf die Zellselektion, weil ja immer die Zellen selektiert werden, zu der du geklickt hast.

die Frage ist, brauchst du wirklich die Userform?
das Auswahlfeld für die Zellen bekommst du auch einfacher, wenn du eine Gültigkeitsprüfung für die Zellen anlegst.
dh 
- markiere alle Zellen der Spalte C für die das gelten soll
- Klicke auf DATEN - DATENTOOLS - DATENÜBERPRÜFUNG, klicke dort auf Einstellungen: Zulassen - Liste und gib bei Quelle "=Bezeichnung" ein.
dann kommt bei Klick auf jede Zelle ein DropDown, aus dem du auswählen kannst.

willst du bei der Userform bleiben, würde ich so vorgehen:

1. füge im Initialize-Event die Befehlszeile hinzu:
ListBox1.ControlSource = ActiveCell.Address
(die weiteren Zeilen in diesem Makro kannst du weglassen, wenn du diese Einstellungen in der Eigenschaftsliste der Listbox einträgst, da sie sich nicht ändern, kann man das so machen)
über Controlsource ist die Listbox mit der Zelle verknüpft, dh der gewählte Eintrag wird sofort in die Zelle geschreiben.
2. das Schließen geht dann über das Schließkreuz oder du fügst einen weiteren Button hinzu, der das "Unload Me" ausführt. (nicht Me.Hide, wenn du Me.Hide verwendest müsste das mit der Controlsource ins Activate-Event und nicht ins Initialize-Event.

Gruß Daniel
[-] Folgende(r) 1 Nutzer sagt Danke an slowboarder für diesen Beitrag:
  • Klaus-Dieter
Antworten Top
#10
(18.07.2025, 17:59)slowboarder schrieb: sieht für mich wie ein Bug aus.
der Doppelklick auf die Listbox wirkt nach dem Schließen der Userform noch auf die Zellselektion, weil ja immer die Zellen selektiert werden, zu der du geklickt hast.

Hallo Daniel,

nein das ist kein Bug, nur ein simpler Programmierfehler.

Die Userform wird mit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
aufgerufen.

Das Ding heißt Before und das ist des Rätsel Lösung.

Der Doppelklick kommt und bevor jetzt der eigentliche Befehl in Excel (die geklickte Zelle geht in den Editiermodus) ausgeführt wird, wird dieses Ereignis ausgelöst.
Die Userform wird vom Code aufgerufen, aber im Hintergrund lautet immer noch der Doppelklick... sozusagen.
Wenn Die Userform zugeht und dann führt die Excel-UI den Doppelklick aus und der Code will aber noch ActiveCell.Select gleichzeitig.

Naja, so grob.

Wie auch immer, die Lösung ist im Worksheet_BeforeDoubleClick als erstes Cancel=True auszuführen, dann bricht die UI den Doppelklick ab und der Code kann in Ruhe werkeln.

Andreas.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste