[VBA] Welches Listbox-Item wurde gerde geklickt (Event?)

Moderator: ModerationP

Re: [VBA] Welches Listbox-Item wurde gerde geklickt (Event?)

Beitragvon snb » 14. Sep 2021, 09:08

Noch immer einer Zitronenliebhaber ?
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8726
Registriert: 25. Sep 2014, 16:37

Re: [VBA] Welches Listbox-Item wurde gerde geklickt (Event?)

Beitragvon Gast » 14. Sep 2021, 09:12

snb hat geschrieben:Noch immer einer Zitronenliebhaber ?


den versteh ich gerad nicht :D
Gast
 

Re: [VBA] Welches Listbox-Item wurde gerde geklickt (Event?)

Beitragvon slowboarder » 14. Sep 2021, 09:19

Eher ein Fan davon, Ursachen zu vermeiden statt Symptome zu bekämpfen.
Und auch wenn man es anders löst, die Events zu kennen und deren Wirkung zu verstehen, kann nie schaden.
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 28455
Registriert: 18. Apr 2009, 13:33

Re: [VBA] Welches Listbox-Item wurde gerde geklickt (Event?)

Beitragvon Kuwe » 14. Sep 2021, 11:28

Gast hat geschrieben:... mit Maus als auch Tastatur ratzfatz die Personen markieren (Cursor + Space)
Hat den Vorteil dass ich mit Maus nicht scrollen muss bei längeren Listen.....das spart Zeit.


Code: Alles auswählen
Private Sub ListBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
   If KeyCode = 32 Then ListBox2.Selected(ListBox1.ListIndex) = False
End Sub
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   ListBox2.Selected(ListBox1.ListIndex) = False
End Sub
Private Sub ListBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 32 Then ListBox1.Selected(ListBox2.ListIndex) = False
End Sub
Private Sub ListBox2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   ListBox1.Selected(ListBox2.ListIndex) = False
End Sub
Gruß Uwe
Benutzeravatar
Kuwe
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6644
Registriert: 30. Dez 2003, 18:37

Re: [VBA] Welches Listbox-Item wurde gerde geklickt (Event?)

Beitragvon DerHoepp » 15. Sep 2021, 08:34

Moin auch von mir,

ich würde da mit drei Listboxen arbeiten. Die Mittige enthält den Ausgangszustand mit allen möglichen Teilnehmern. Mit vier knöpfen lassen sich dann die einzelnen Items nach links und rechts oder zurück in die Mitte verschieben:
Code: Alles auswählen
'Option Explicit

Private Sub UserForm_Initialize()
    LiBoCenter.List = WorksheetFunction.Transpose(Tabelle1.Cells(1).CurrentRegion.Columns(1).Value)
End Sub

Private Sub CMDCenterToLeft_Click()
    MoveItems LiBoCenter, LiBoLeft
End Sub

Private Sub CMDCenterToRight_Click()
    MoveItems LiBoCenter, LiBoRight
End Sub

Private Sub CMDLeftToCenter_Click()
    MoveItems LiBoLeft, LiBoCenter
End Sub

Private Sub CMDRightToCenter_Click()
    MoveItems LiBoRight, LiBoCenter
End Sub
Private Sub MoveItems(Src As Object, Dst As Object)
    Dim i As Long
    For i = UBound(Src.List) To LBound(Src.List) Step -1
        If Src.Selected(i) Then
            Dst.AddItem Src.List(i)
            Src.RemoveItem (i)
        End If
    Next i
End Sub

Der einzige Nachteil daran ist, dass .AddItem das .List()-Array versaut und aus einem eindimensionalen Array immer ein zweidimensionales Array macht, bei dem das innere Array auch noch immer 10 Items hat.

Viele Grüße erstmal!
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9727
Registriert: 14. Mai 2013, 11:08

Re: [VBA] Welches Listbox-Item wurde gerde geklickt (Event?)

Beitragvon MadMax2k8 » 21. Sep 2021, 10:57

Ich brauche unerwartet noch mal dringend Hilfe bei dem Projekt:

-ich habe es soweit fertig gebaut dass es die anforderungen erfüllt
-es wurde dann zur verwendung weitergegeben
-aktuell kommt ein "Laufzeitfehler 438" wenn die userform angezeigt werden soll

-habe dann erstmal vermutet, dass es evtl. wieder an versions-unterschieden liegt -> ich habe auf excel 2019 erstellt, wird auf excel 2016 verwendet
(War bei ein paar Formeln wo ich WENNS verwendet hatte auch der Fall, musste dann auf WENN-Verschachtelungen umbauen)

Habe für Fehleranalyse extra mein office 2019 deinstalliert und mir auch excel 2016 installiert

Bei mir funktioniert die Datei tadellos. Habs zigmal probiert (in office 2019 und office 2016)
Aber auf dem Laptop des Benutzers kommt immer der Laufzeitfehler, sobald die UserForm aufgerufen werden soll.


wie kann das sein? und vor allem - wie bekomme ich das behoben so dass sie auch dort läuft wo der fehler auftritt?
Habe alles soweit es mir möglich ist überprüft:
-habe den button auf tabelle 1 komplett default gelassen -> keinerlei änderungen an der formatierung/eigenschaften (aber der Laufzeitfehler kommt auch wenn ich in VB gehe und via F5 die UserForm1 starten will)
-habe die sub mit UserForm1.Show auch testweise mal in Modul 1 statt in DieseArbeitsmappe gepackt um das auszuschließen

alles ohne erfolg.

prinzipiell habe ich userformen schon immer so verwendet und nie probleme gehabt. (also im code der userform das _initialize abhandeln; irgendwo anders den trigger der userform mit userform.show ausstatten. (oder ist da was falsch dran?)


Habe die Datei mal angehängt...(habe lediglich die Liste mit den Namen abgeändert gegen Dummys) wie gesagt UserForm1.Show kommt der "Laufzeitfehler '438' - Objekt unterstützt diese Eigenschaft oder Methode nicht"


Dickes Danke schon mal vorab für Hilfe
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von MadMax2k8 am 21. Sep 2021, 11:09, insgesamt 1-mal geändert.
[Hinweis] Hier könnte IHRE Werbung stehen... [/Hinweis]
Benutzeravatar
MadMax2k8
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 06. Feb 2020, 08:59

Re: [VBA] Welches Listbox-Item wurde gerde geklickt (Event?)

Beitragvon slowboarder » 21. Sep 2021, 11:09

Hi
Wenn man bei Userform1.Show einen Fehlerstop bekommst, sollte man als erstes in die Extras - Optionen - Allgemein des Editors gehen und und die Option "Unterbrechen bei Fehlern - in Klassenmodul" aktivieren.
dann bekommst du die gelbe Markierung dort, wo der Fehler tatsächlich passiert und nicht pauschal beim Aufruf.

2. zu deinem Fehler:
bei mir zeichnet der Recorder folgendes für das Sortieren nach Name auf:
Code: Alles auswählen
... Key:=Range("tabAbrechnung[Name]") ...

vielleicht liegst ja daran?

Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 28455
Registriert: 18. Apr 2009, 13:33

Re: [VBA] Welches Listbox-Item wurde gerde geklickt (Event?)

Beitragvon MadMax2k8 » 21. Sep 2021, 11:28

Also ich habe jetzt mal die Sortierung komplett auskommentiert - dann kommt der Fehler tatsächlich nicht.

Ist für den Moment hilfreich, aber mittelfristig will ich die sortierung natürlich gern wieder reinbekommen (falls mal Leute dazukommen, soll es weiter alphabetisch sein in den Listobjekten der Userform)


wie wäre denn die sauberste, schlankste variante die Tabelle "tabAbrechnung" nach der Spalte "Name" (aufsteigend) zu sortieren?

Code: Alles auswählen
'Sortieren
With Tabelle2
Range("tabAbrechnung").Sort _
 Key1:=Range("F" & "1"), Order1:=xlAscending, _
 Header:=xlYes, MatchCase:=True
End With


das war mein ansatz - aber dann kommt ein Laufzeitfehler 1001 (nicht bei mir, aber auf dem laptop wo es laufen sollte)
wo zur hölle ist denn der unterschied zwischen den excel 2016-versionen?
[Hinweis] Hier könnte IHRE Werbung stehen... [/Hinweis]
Benutzeravatar
MadMax2k8
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 06. Feb 2020, 08:59

Re: [VBA] Welches Listbox-Item wurde gerde geklickt (Event?)

Beitragvon slowboarder » 21. Sep 2021, 11:50

ja, die klassische Schreibweise von Excel 2003 verwende ich auch immer bevorzugt, da das nur eine Zeile ist.
aber auch hier gilt das Problem, dass jedes Range mit Zelladresse oder Cells() immer auf das aktive Blatt referenziert.

bei Range("tabAbrechnung") brauchst du kein Tabellenblatt davor, weil du hier über einen definierten Namen gehst und nicht über die Adresse.
Bei Namen steckt das Tabellenblatt schon automatisch mit drin, sofern der Name für den Bereich "Arbeitsmappe" gültig ist (siehst du im Namensmanager).

bei Range("F1") hast du wiederum eine Adresse, da brauchst du das Blatt davor, außerdem muss die dort verwendete Zelle teil des sortierten Bereichs sein, was man bei der Zeilennummer beachten muss:
also
Code: Alles auswählen
..., Key1:=Sheets("Abrechnung").Range("F3"), ...

besser wäre es hier den Key als Teil des Zellbereichs des Namens anzugeben, dann bist du bezüglich des Blattnamens auf der sicheren seite, und auch die Zeilennummer kann immer 1 sein, da es dann die erste Zeile des Bereichs ist, egal wo dieser im Blatt liegt:
Code: Alles auswählen
..., Key1:=Range("tabAbrechnung").Cells(1, 6), ...


wobei du schon den Range in die WITH-KLammer nehmen und diese dann auch anwenden solltest:
Code: Alles auswählen
With Range("tabAbrechnung")
    .Sort, Key1:=.cells(1, 6), Order1:=xlAscending, Header:=xlYes, MatchCase:=True
End With


oder verwende die korrekte Bezeichnung der Spalte des benannten Bereichs:
Code: Alles auswählen
Range("tabAbrechnung").Sort key1:=Range("tabAbrechnung[Name]"),order1:=xlAscending,header:=xlno

beachte, dass Range("tabAbrechnung") sich nur auf die Daten referenziert und die Überschriftenzeile nicht enthält.
deine Referenz: Range("tabAbrechnung[[#All],[Name]]") schließt die Überschrift mit ein und somit hattest du den Fall, dass dass der Bereich, der die Sortierspalte definiert, außerhalb des Bereichs liegt, der sortiert werden soll und das erzeugt den Fehler.
Die Sortierspalte muss vollständiger Teil des sortieren Bereichs sein.

Gruß Daniel
Zuletzt geändert von slowboarder am 21. Sep 2021, 12:03, insgesamt 1-mal geändert.
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 28455
Registriert: 18. Apr 2009, 13:33

Re: [VBA] Welches Listbox-Item wurde gerde geklickt (Event?)

Beitragvon MadMax2k8 » 21. Sep 2021, 11:56

Dickes Dankeschön, wieder ein wichtiges Detail gelernt :)

Der Teufel ist ein Eichhörnchen..... :D


aber wie erklärt sich dass es vorher mein excel 2016 raffte und das andere nicht? Das gibt mir noch Rätsel auf....
[Hinweis] Hier könnte IHRE Werbung stehen... [/Hinweis]
Benutzeravatar
MadMax2k8
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 31
Registriert: 06. Feb 2020, 08:59

Re: [VBA] Welches Listbox-Item wurde gerde geklickt (Event?)

Beitragvon slowboarder » 21. Sep 2021, 12:08

schwer zu sagen.
da müsste man wissen, was du genau gemacht hast.
ich hab mit Excel 2016 getestet und da kommt mit deinem Code der Fehler.
Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 28455
Registriert: 18. Apr 2009, 13:33

Vorherige

Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: AlterDresdner, EbyAS und 34 Gäste